Skip to content

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:任务队列