java如何管理线程
Java线程管理方法
Java提供了多种线程管理机制,包括线程创建、同步、通信和线程池等。以下是一些核心方法:
线程创建与启动
继承Thread类或实现Runnable接口可以创建线程。Java 8之后还可以使用Lambda表达式简化实现。
// 方式1:继承Thread
class MyThread extends Thread {
public void run() {
System.out.println("Thread running");
}
}
// 方式2:实现Runnable
class MyRunnable implements Runnable {
public void run() {
System.out.println("Runnable running");
}
}
// 启动线程
new MyThread().start();
new Thread(new MyRunnable()).start();
// Lambda方式
new Thread(() -> System.out.println("Lambda thread")).start();
线程同步
使用synchronized关键字或Lock接口实现线程同步,避免竞态条件。
// synchronized方法
public synchronized void syncMethod() {
// 临界区代码
}
// synchronized块
public void syncBlock() {
synchronized(this) {
// 临界区代码
}
}
// Lock接口
Lock lock = new ReentrantLock();
public void lockExample() {
lock.lock();
try {
// 临界区代码
} finally {
lock.unlock();
}
}
线程通信
wait()、notify()和notifyAll()方法实现线程间通信,应在synchronized块中使用。
public class WaitNotifyExample {
private boolean flag = false;
public synchronized void waitForFlag() throws InterruptedException {
while(!flag) {
wait(); // 释放锁并等待
}
// 条件满足后执行
}
public synchronized void setFlag() {
flag = true;
notifyAll(); // 唤醒所有等待线程
}
}
线程池管理
Executor框架提供了线程池管理,避免频繁创建销毁线程的开销。
ExecutorService executor = Executors.newFixedThreadPool(4);
// 提交任务
executor.submit(() -> {
System.out.println("Task executed by thread pool");
});
// 关闭线程池
executor.shutdown();
线程中断
通过interrupt()方法请求中断线程,线程应检查中断状态并合理响应。
public void run() {
while(!Thread.currentThread().isInterrupted()) {
try {
// 正常工作
} catch (InterruptedException e) {
Thread.currentThread().interrupt(); // 重新设置中断状态
break;
}
}
}
并发工具类
Java并发包(java.util.concurrent)提供了多种高级工具:

- CountDownLatch:等待多个线程完成
- CyclicBarrier:线程到达屏障点后继续执行
- Semaphore:控制资源访问数量
- Future和CompletableFuture:异步计算结果
CountDownLatch latch = new CountDownLatch(3);
ExecutorService executor = Executors.newFixedThreadPool(3);
for (int i = 0; i < 3; i++) {
executor.submit(() -> {
// 执行任务
latch.countDown();
});
}
latch.await(); // 等待所有任务完成
executor.shutdown();






