Java 多线程基础
TIP
多线程可以让程序同时执行多个任务,提高 CPU 利用率。Java 通过 Thread 类和 Runnable 接口提供多线程支持。
创建线程的方式
1. 继承 Thread 类
java
class MyThread extends Thread {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + " 执行中");
}
}
new MyThread().start();2. 实现 Runnable 接口(推荐)
java
class MyTask implements Runnable {
@Override
public void run() {
System.out.println("任务执行中");
}
}
new Thread(new MyTask()).start();3. Callable + FutureTask(带返回值)
java
Callable<Integer> task = () -> {
Thread.sleep(1000);
return 42;
};
FutureTask<Integer> future = new FutureTask<>(task);
new Thread(future).start();
Integer result = future.get(); // 获取返回值,会阻塞线程生命周期
新建(New) → 就绪(Runnable) → 运行(Running) → 死亡(Terminated)
↑ ↓
阻塞(Blocked) ← 等待(Waiting)线程同步
synchronized 关键字
java
public class Counter {
private int count = 0;
public synchronized void increment() {
count++;
}
public synchronized int getCount() {
return count;
}
}Lock 接口
java
import java.util.concurrent.locks.ReentrantLock;
public class SafeCounter {
private final ReentrantLock lock = new ReentrantLock();
private int count = 0;
public void increment() {
lock.lock();
try {
count++;
} finally {
lock.unlock();
}
}
}线程池
java
ExecutorService executor = Executors.newFixedThreadPool(4);
for (int i = 0; i < 10; i++) {
executor.submit(() -> {
System.out.println(Thread.currentThread().getName() + " 执行");
});
}
executor.shutdown();TIP
推荐使用 ThreadPoolExecutor 手动创建线程池,明确核心参数:
- corePoolSize:核心线程数
- maximumPoolSize:最大线程数
- keepAliveTime:空闲线程存活时间
- workQueue:任务队列