随笔分类 - JAVA - JUC
摘要:Semaphore Semaphore 更加适合用于控制对有限资源的访问,特别是当你需要允许一定数量的线程同时访问资源时 CountDownLatch 更加适合用于协调多个线程的完成状态,确保在某些操作完成后再执行后续操作 它用于控制对共享资源的访问,通过维护一个许可的计数器来限制同时访问某个资源的
阅读全文
摘要:CyclicBarrier 和 CountDownLatch 有点类似,主要区别是 CyclicBarrier 可以重用,常用方法如下: CyclicBarrier barrier = new CyclicBarrier(3); // 表示条件为:要有 3 个线程达到屏障(未指定屏障动作) barr
阅读全文
摘要:CountDownLatch Semaphore 更加适合用于控制对有限资源的访问,特别是当你需要允许一定数量的线程同时访问资源时 CountDownLatch 更加适合用于协调多个线程的完成状态,确保在某些操作完成后再执行后续操作 它用于协调多个线程的执行,使得某些操作必须等到其他操作完成后才能继
阅读全文
摘要:工作流程 提交任务时,如果线程池当前线程数量小于核心线程数时,直接创建线程来处理任务(线程池初始不会创建线程,当有任务提交才创建) 当线程池线程数量达到核心线程数,任务进入队列 当队列满了不能继续放时,再次创建线程来处理任务 这时的线程叫救急线程 当救急线程处理完任务空闲时,达到存活时间后会销毁救急
阅读全文
摘要:创建线程方式 继承 Thread 实现 Runnable 实现 Callable,线程也能有返回值,必须搭配线程池或 FutureTask 使用 Callable 示例 FutureTask<Integer> futureTask = new FutureTask<>(() -> 123); new
阅读全文
摘要:产生背景 已经有了 ReentrantLock ,为什么还来一个 ReentrantReadWriteLock? ReentrantLock 是独占锁,哪怕所有线程都是读操作,其实不用加锁,但是 ReentrantLock 一次还是只能让一个线程获取,ReentrantReadWriteLock 就
阅读全文
摘要:类结构 public class ReentrantLock implements Lock, java.io.Serializable { // 有个 Sync 的属性(是内部类 Sync,就是 AQS) private final Sync sync; // Sync 继承 AQS abstra
阅读全文
摘要:属性 public abstract class AbstractQueuedSynchronizer extends AbstractOwnableSynchronizer implements java.io.Serializable { // 头节点 private transient vol
阅读全文
摘要:线程等待和唤醒三种方式 方式 等待 唤醒 描述 Object wait notity/notifyAll 必须用在 synchronized 里,需要先等待再唤醒 Condition await singal 必须用在 Lock 块中,需要先等待再唤醒 LockSupport park unpark
阅读全文