Java 并发编程核心概念
并发编程是 Java 开发中的高级主题。本文基于 Java 21 讲解核心概念。
一、线程基础
创建线程的三种方式
// 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");
}
}
// 3. 实现 Callable 接口(有返回值)
class MyCallable implements Callable {
public String call() {
return "Result";
}
}
二、线程池
为什么使用线程池
- 减少线程创建和销毁的开销
- 提高响应速度
- 提高线程的可管理性
ThreadPoolExecutor 核心参数
ThreadPoolExecutor executor = new ThreadPoolExecutor(
4, // corePoolSize: 核心线程数
8, // maximumPoolSize: 最大线程数
60L, // keepAliveTime: 空闲线程存活时间
TimeUnit.SECONDS,
new ArrayBlockingQueue<>(100),
Executors.defaultThreadFactory(),
new ThreadPoolExecutor.CallerRunsPolicy()
);
三、锁机制
synchronized vs ReentrantLock
- synchronized: JVM 层面,自动释放
- ReentrantLock: API 层面,手动释放,支持公平锁
四、原子操作
AtomicInteger atomicInt = new AtomicInteger(0);
atomicInt.incrementAndGet(); // 原子自增
atomicInt.compareAndSet(0, 1); // CAS 操作
五、Java 21 虚拟线程
Thread.startVirtualThread(() -> {
System.out.println("Virtual thread running");
});
六、最佳实践
- 优先使用线程池
- 使用并发工具类代替 wait/notify
- 避免死锁:按固定顺序获取锁
- 使用不可变对象减少锁竞争