版本:基于 Java 17 & Java 21 LTS
在当今多核 CPU 的时代,编写高效的并发程序是每个开发者的必修课。Java 自诞生之日起就内置了多线程支持。本篇将从最基础的线程概念讲起,带你一步步跨向 Java 21 最具革命性的虚拟线程。
1. 基础概念:Thread 与 Runnable
线程是程序执行的最小单位。在 Java 中,你可以通过实现 Runnable 接口或继承 Thread 类来创建线程。
// 现代推荐写法:使用 Lambda 表达式实现 Runnable
Runnable task = () -> {
System.out.println("子线程正在运行: " + Thread.currentThread().getName());
};
Thread thread = new Thread(task);
thread.start(); // 启动线程2. 线程池:ExecutorService (Java 5+)
在实际开发中,我们严禁显式创建线程(即 new Thread()),因为线程的创建和销毁开销巨大。现代 Java 推荐使用线程池。
import java.util.concurrent.Executors;
// 创建一个固定大小为 4 的线程池
try (var executor = Executors.newFixedThreadPool(4)) {
executor.submit(() -> System.out.println("在线程池中执行任务"));
// 在 Java 19+ 中,ExecutorService 实现了 AutoCloseable,可以使用 try-with-resources
}3. 并发安全:synchronized 与 Lock
当多个线程同时访问共享资源时,会产生竞态条件(Race Condition)。
传统写法 (synchronized)
public synchronized void increment() {
count++;
}现代写法 (ReentrantLock)
import java.util.concurrent.locks.ReentrantLock;
private final ReentrantLock lock = new ReentrantLock();
public void safeIncrement() {
lock.lock();
try {
count++;
} finally {
lock.unlock(); // 必须在 finally 中释放锁
}
}4. 革命性特性:虚拟线程 (Virtual Threads, Java 21 LTS)
这是 Java 21 最重磅的特性。传统的平台线程(Platform Threads)与操作系统线程 1:1 映射,数量受限(通常几千个就会撑爆内存)。
虚拟线程由 JVM 调度,极其轻量。你可以轻松开启 100 万个线程而不会导致系统崩溃。
// 创建一个为每个任务分配虚拟线程的 Executor
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
for (int i = 0; i < 10_000; i++) {
executor.submit(() -> {
// 模拟阻塞操作,如数据库查询或网络请求
Thread.sleep(java.time.Duration.ofSeconds(1));
return "Done";
});
}
} // 所有的虚拟线程会在这里自动等待完成核心优势:
高并发:处理成千上万个并发请求不再需要复杂的异步编程模型。
简单:你可以用最简单的阻塞式逻辑写出极其高效的代码。
5. 线程安全集合与原子类
在处理并发时,优先使用标准库提供的工具类:
原子类:
AtomicInteger,AtomicLong(利用 CAS 保证性能)。并发集合:
ConcurrentHashMap,CopyOnWriteArrayList。
import java.util.concurrent.atomic.AtomicInteger;
private AtomicInteger safeCount = new AtomicInteger(0);
safeCount.incrementAndGet(); // 原子性自增本章小结
第十篇我们探讨了:
线程的基础创建方式。
为什么在现代开发中必须使用线程池。
如何利用
synchronized和Lock保护共享资源。虚拟线程 (Virtual Threads):Java 并发编程的新时代。
结语
恭喜你!完成了这十篇 Java 现代开发系列博客。从基础语法到高并发实战,你已经掌握了 Java 开发最核心、最现代的知识体系。
接下来的路:
JVM 调优:理解内存模型 (JMM) 与垃圾回收 (GC)。
设计模式:学会写出可维护、可扩展的代码。
框架实战:深入学习 Spring Boot 3 / Spring Cloud 等工业级应用。
保持好奇,持续编码!