IndRNN微博短文本情感分析实战:从数据清洗到模型调优
2026/10/19 2:38:44
Java 多线程开发是 Java 并发编程的核心内容,用于实现程序的并发执行,提高 CPU 利用率和系统吞吐量。以下是 Java 多线程开发的系统性介绍:
Runnable接口(推荐)Runnabletask=()->System.out.println("Hello from thread: "+Thread.currentThread().getName());Threadt=newThread(task);t.start();Thread类(不推荐)classMyThreadextendsThread{publicvoidrun(){System.out.println("Running in "+getName());}}newMyThread().start();✅最佳实践:优先使用
Runnable+Thread或更高级的并发工具(如线程池)。
| 状态 | 说明 |
|---|---|
NEW | 线程刚创建,未调用start() |
RUNNABLE | 可运行(包括正在运行或等待 CPU 时间片) |
BLOCKED | 等待获取监视器锁(如进入synchronized块) |
WAITING | 无限期等待(如wait(),join(),LockSupport.park()) |
TIMED_WAITING | 限时等待(如sleep(1000),wait(1000)) |
TERMINATED | 线程执行完毕或异常终止 |
可通过Thread.getState()查看状态。
synchronized关键字this)Class对象synchronized(obj) { ... },可指定任意锁对象⚠️ 静态与非静态
synchronized方法不互斥(锁对象不同)。
volatile关键字i++仍需同步)java.util.concurrent.locks.LockReentrantLock)Locklock=newReentrantLock();lock.lock();try{// 临界区}finally{lock.unlock();// 必须在 finally 中释放}wait()/notify()/notifyAll()synchronized块中调用wait()释放锁并进入等待队列notify()唤醒一个等待线程Condition(配合Lock使用)Locklock=newReentrantLock();Conditioncondition=lock.newCondition();// 等待lock.lock();try{condition.await();}finally{lock.unlock();}// 唤醒condition.signal();// 或 signalAll()java.util.concurrent包)避免频繁创建/销毁线程,提升性能。
ExecutorServiceexecutor=Executors.newFixedThreadPool(4);executor.submit(()->{// 任务逻辑});executor.shutdown();常用工厂方法:
newFixedThreadPool(n):固定大小线程池newCachedThreadPool():弹性线程池(适合短任务)newSingleThreadExecutor():单线程顺序执行ThreadPoolExecutor自定义参数(避免Executors的隐藏风险)ConcurrentHashMap:线程安全的 HashMapCopyOnWriteArrayList:读多写少场景BlockingQueue:如ArrayBlockingQueue,LinkedBlockingQueue(常用于生产者-消费者)CountDownLatch:等待 N 个任务完成CyclicBarrier:多个线程互相等待到达屏障点Semaphore:控制同时访问资源的线程数CompletableFuture:异步编程(Java 8+)volatile或同步)ConcurrentHashMap而非Collections.synchronizedMap)new Thread(runnable, "MyWorker"))InterruptedException,不要忽略BlockingQueue)BlockingQueue<Integer>queue=newArrayBlockingQueue<>(10);// 生产者Threadproducer=newThread(()->{try{for(inti=0;i<20;i++){queue.put(i);// 阻塞直到有空间System.out.println("Produced: "+i);}}catch(InterruptedExceptione){Thread.currentThread().interrupt();}});// 消费者Threadconsumer=newThread(()->{try{while(!Thread.currentThread().isInterrupted()){Integeritem=queue.take();// 阻塞直到有元素System.out.println("Consumed: "+item);}}catch(InterruptedExceptione){Thread.currentThread().interrupt();}});producer.start();consumer.start();Java 多线程开发从基础线程创建到高级并发工具,是一个逐步演进的过程。现代 Java 开发应:
“少用原始 Thread,多用 Executor;少用 synchronized,多用并发集合和原子类;善用 CompletableFuture 实现异步非阻塞。”
掌握这些知识,你就能写出高效、安全、可维护的并发程序。