Java高并发面试必备:多线程核心精讲
Java高并发多线程基础面试清单
多线程的基本概念
多线程允许程序同时执行多个任务。例如,在餐厅中,服务员(线程)可以同时处理多个顾客的订单,而不是按顺序一个一个处理。
Java中创建线程的两种方式:
- 继承
Thread类并重写run()方法:
class MyThread extends Thread {
public void run() {
System.out.println("Thread is running");
}
}
MyThread t = new MyThread();
t.start();
- 实现
Runnable接口并传递给Thread对象:
class MyRunnable implements Runnable {
public void run() {
System.out.println("Thread is running");
}
}
Thread t = new Thread(new MyRunnable());
t.start();
线程的生命周期
线程的状态包括:
- NEW:线程被创建但未启动。
- RUNNABLE:线程正在运行或准备运行。
- BLOCKED:线程等待获取锁(如其他线程占用
synchronized块)。 - WAITING:线程无限期等待(如调用
wait())。 - TIMED_WAITING:线程有限期等待(如调用
sleep(1000))。 - TERMINATED:线程执行完毕。
生活案例:排队买奶茶时,顾客(线程)可能正在点单(RUNNABLE)、等待取餐(WAITING),或已离开(TERMINATED)。
线程同步与锁
多线程共享资源时可能引发竞态条件。例如,多个顾客同时抢购最后一件商品,需用锁机制确保只有一个顾客成功购买。
synchronized关键字:
class Counter {
private int count = 0;
public synchronized void increment() {
count++;
}
}
ReentrantLock:
Lock lock = new ReentrantLock();
lock.lock();
try {
// 临界区代码
} finally {
lock.unlock();
}
线程间通信
wait()、notify()和notifyAll()用于线程协作。例如,厨师(生产者线程)做好菜后通知服务员(消费者线程)端菜:
synchronized (sharedQueue) {
while (sharedQueue.isEmpty()) {
sharedQueue.wait(); // 服务员等待
}
sharedQueue.notifyAll(); // 厨师通知
}
线程池
线程池避免频繁创建销毁线程的开销,类似餐厅固定雇佣几个服务员处理订单。
ExecutorService示例:
ExecutorService executor = Executors.newFixedThreadPool(3);
executor.submit(() -> System.out.println("Task executed"));
executor.shutdown();
并发工具类
CountDownLatch:多个线程等待一个事件。例如,比赛开始前所有选手等待发令枪。
CountDownLatch latch = new CountDownLatch(3);
latch.await(); // 等待其他线程完成
latch.countDown(); // 完成一个任务
CyclicBarrier:线程相互等待。例如,团队旅游时所有人到齐后才出发。
CyclicBarrier barrier = new CyclicBarrier(3, () -> System.out.println("All arrived"));
barrier.await();
原子操作
AtomicInteger等类提供无锁线程安全操作,类似多人同时投票但计票器自动累加:
AtomicInteger votes = new AtomicInteger(0);
votes.incrementAndGet(); // 线程安全自增
内存模型与volatile
volatile保证变量可见性,避免线程读取缓存旧值。例如,天气预报员更新天气后,所有人立即看到最新信息:
private volatile boolean isUpdated = true;
死锁与避免
死锁类似两人互相等待对方先还钱。避免方法:
- 按固定顺序获取锁。
- 使用
tryLock()设置超时。
实际应用场景
- 电商秒杀:线程池处理高并发请求,
Redis原子操作扣减库存。 - 文件处理:多线程分割大文件并行处理。
通过生活案例与代码结合,可更直观理解多线程核心概念。
5G.okacbd121.asia/PoSt/1123_956867.HtM
5G.okacbd122.asia/PoSt/1123_354040.HtM
5G.okacbd123.asia/PoSt/1123_381671.HtM
5G.okacbd124.asia/PoSt/1123_552597.HtM
5G.okacbd125.asia/PoSt/1123_941545.HtM
5G.okacbd126.asia/PoSt/1123_890892.HtM
5G.okacbd127.asia/PoSt/1123_702155.HtM
5G.okacbd128.asia/PoSt/1123_182143.HtM
5G.okacbd129.asia/PoSt/1123_116454.HtM
5G.okacbd130.asia/PoSt/1123_478750.HtM
5G.okacbd121.asia/PoSt/1123_433964.HtM
5G.okacbd122.asia/PoSt/1123_209109.HtM
5G.okacbd123.asia/PoSt/1123_505163.HtM
5G.okacbd124.asia/PoSt/1123_313677.HtM
5G.okacbd125.asia/PoSt/1123_570273.HtM
5G.okacbd126.asia/PoSt/1123_031797.HtM
5G.okacbd127.asia/PoSt/1123_955748.HtM
5G.okacbd128.asia/PoSt/1123_219890.HtM
5G.okacbd129.asia/PoSt/1123_177691.HtM
5G.okacbd130.asia/PoSt/1123_355966.HtM
5G.okacbd121.asia/PoSt/1123_799477.HtM
5G.okacbd122.asia/PoSt/1123_476021.HtM
5G.okacbd123.asia/PoSt/1123_556970.HtM
5G.okacbd124.asia/PoSt/1123_281412.HtM
5G.okacbd125.asia/PoSt/1123_770872.HtM
5G.okacbd126.asia/PoSt/1123_284579.HtM
5G.okacbd127.asia/PoSt/1123_283297.HtM
5G.okacbd128.asia/PoSt/1123_190576.HtM
5G.okacbd129.asia/PoSt/1123_199547.HtM
5G.okacbd130.asia/PoSt/1123_239525.HtM
5G.okacbd121.asia/PoSt/1123_171046.HtM
5G.okacbd122.asia/PoSt/1123_065855.HtM
5G.okacbd123.asia/PoSt/1123_649949.HtM
5G.okacbd124.asia/PoSt/1123_515096.HtM
5G.okacbd125.asia/PoSt/1123_536715.HtM
5G.okacbd126.asia/PoSt/1123_003301.HtM
5G.okacbd127.asia/PoSt/1123_352106.HtM
5G.okacbd128.asia/PoSt/1123_160695.HtM
5G.okacbd129.asia/PoSt/1123_971699.HtM
5G.okacbd130.asia/PoSt/1123_097181.HtM
5G.okacbd121.asia/PoSt/1123_241723.HtM
5G.okacbd122.asia/PoSt/1123_652183.HtM
5G.okacbd123.asia/PoSt/1123_699072.HtM
5G.okacbd124.asia/PoSt/1123_737846.HtM
5G.okacbd125.asia/PoSt/1123_998929.HtM
5G.okacbd126.asia/PoSt/1123_919320.HtM
5G.okacbd127.asia/PoSt/1123_109123.HtM
5G.okacbd128.asia/PoSt/1123_567649.HtM
5G.okacbd129.asia/PoSt/1123_360518.HtM
5G.okacbd130.asia/PoSt/1123_699880.HtM
5G.okacbd121.asia/PoSt/1123_449115.HtM
5G.okacbd122.asia/PoSt/1123_896077.HtM
5G.okacbd123.asia/PoSt/1123_369734.HtM
5G.okacbd124.asia/PoSt/1123_535190.HtM
5G.okacbd125.asia/PoSt/1123_792701.HtM
5G.okacbd126.asia/PoSt/1123_990091.HtM
5G.okacbd127.asia/PoSt/1123_891194.HtM
5G.okacbd128.asia/PoSt/1123_679199.HtM
5G.okacbd129.asia/PoSt/1123_940667.HtM
5G.okacbd130.asia/PoSt/1123_605352.HtM
5G.okacbd121.asia/PoSt/1123_789187.HtM
5G.okacbd122.asia/PoSt/1123_758096.HtM
5G.okacbd123.asia/PoSt/1123_484100.HtM
5G.okacbd124.asia/PoSt/1123_885792.HtM
5G.okacbd125.asia/PoSt/1123_840828.HtM
5G.okacbd126.asia/PoSt/1123_945816.HtM
5G.okacbd127.asia/PoSt/1123_803789.HtM
5G.okacbd128.asia/PoSt/1123_374055.HtM
5G.okacbd129.asia/PoSt/1123_982041.HtM
5G.okacbd130.asia/PoSt/1123_553570.HtM
5G.okacbd121.asia/PoSt/1123_075380.HtM
5G.okacbd122.asia/PoSt/1123_463267.HtM
5G.okacbd123.asia/PoSt/1123_336761.HtM
5G.okacbd124.asia/PoSt/1123_467168.HtM
5G.okacbd125.asia/PoSt/1123_211657.HtM
5G.okacbd126.asia/PoSt/1123_455462.HtM
5G.okacbd127.asia/PoSt/1123_102297.HtM
5G.okacbd128.asia/PoSt/1123_600200.HtM
5G.okacbd129.asia/PoSt/1123_242873.HtM
5G.okacbd130.asia/PoSt/1123_131651.HtM