Java高并发面试必备:多线程核心精讲

Java高并发多线程基础面试清单

多线程的基本概念

多线程允许程序同时执行多个任务。例如,在餐厅中,服务员(线程)可以同时处理多个顾客的订单,而不是按顺序一个一个处理。

Java中创建线程的两种方式:

  1. 继承Thread类并重写run()方法:
class MyThread extends Thread {
    public void run() {
        System.out.println("Thread is running");
    }
}
MyThread t = new MyThread();
t.start();
  1. 实现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;

死锁与避免

死锁类似两人互相等待对方先还钱。避免方法:

  1. 按固定顺序获取锁。
  2. 使用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

#牛客AI配图神器#

全部评论

相关推荐

评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务