教程目录
synchronized 和 ReentrantLock 的区别?
一、底层实现 synchronized:JVM 级,字节码指令 monitorenter/monitorexit,依赖对象头的 Mark Word。 ReentrantLock:JDK 级,基于 AQS(AbstractQueuedSynchronizer)实现。 二、对比 维度 synchroni
线程池的核心参数与工作流程?
一、七大核心参数 corePoolSize:核心线程数,即使空闲也保留。 maximumPoolSize:最大线程数。 keepAliveTime:非核心线程空闲存活时间。 unit:时间单位。 workQueue:阻塞队列。 threadFactory:线程工厂。 handler:拒绝策略。 二、
AQS 的原理是什么?
一、定义 AQS(AbstractQueuedSynchronizer)是 JUC 锁的基础框架,用一个 int 状态变量(state)和一个 FIFO 等待队列实现同步。 二、核心 state:同步状态,0 表示空闲,>0 表示被占用。 CLH 队列:未获取锁的线程封装成 Node 入队,自旋 +
volatile 关键字的作用?
一、两大作用 可见性:被 volatile 修饰的变量,一个线程修改后其他线程立即可见。实现:写入时立即刷新主内存,读取时从主内存重新加载。 禁止指令重排:在读写操作前后插入内存屏障。 二、不保证原子性 volatile int count = 0; count++; // 不是原子操作,多线程
CountDownLatch 和 CyclicBarrier 的区别?
一、CountDownLatch 一个或多个线程等待其他线程完成后再继续。 用计数器实现,countDown() 减 1,await() 等待归零。 一次性,归零后不能重置。 场景:主线程等待多个子任务完成。 二、CyclicBarrier 一组线程互相等待,全部到达屏障点后一起继续。 可循环使用,