
JUC源码
文章平均质量分 61
JUC源码
dreambyday
我大抵是病了,
横竖都写不出一行代码。
站起身来点起了一支烟,
这悲伤没有由来。
默默然跑到楼下买了根82年老冰棍,
一口是我吃的,
另一口也是我吃的,
大抵又是到了摸鱼的时刻了吧。
展开
-
JDK8 AbstractQueuedSynchronizer(AQS) 源码 之 独占模式与共享模式
目录一、前言二、带着问题看源码三、独占模式下的public方法3.1 简略流程图3.1.1 acquire方法3.1.2 acquireInterruptibly方法3.1.3 tryAcquireNanos方法3.1.4 release方法3.2 方法列表四、源码分析一、前言 AQS逻辑分为三部分:独占模式(锁标识为EXCLUSIVE)、共享模式(锁标识为SHARED)、条件的逻辑(也就是内部类ConditionObject里的逻辑)。 其中,条件逻辑依附原创 2022-05-03 14:49:49 · 1071 阅读 · 0 评论 -
JDK8 ScheduledThreadPoolExecutor源码理解
一、什么ScheduledThreadPoolExecutorScheduledThreadPoolExecutor调度线程池执行器,继承了ThreadPoolExecutor,除了线程池的特性外,还有延迟执行、定期执行任务的特点。二、使用样例2.1 关键方法2.1.1 submit/execute 提交任务这个方法和普通的线程池一样,执行完就结束了。无延迟或周期调用的功能。2.1.2 scheduleAtFixedRate以固定周期时间执行创建一个周期性的任务,第一次执行的延期时间是init原创 2022-05-25 19:18:27 · 356 阅读 · 1 评论 -
JDK8 J.U.C下几个工具类异同以及使用
目录一、JUC下的工具类的使用1.1 CountDownLatch1.2 CyclicBarrier1.3 Exchanger1.4 Semaphore1.5 Phaser二、各个类的区别一、JUC下的工具类的使用1.1 CountDownLatch1.2 CyclicBarrier1.3 Exchanger1.4 Semaphore1.5 Phaser二、各个类的区别...原创 2022-05-19 21:17:38 · 399 阅读 · 0 评论 -
JDK8 ReentrantReadWriteLock 源码理解
目录Sync继承AQS实现了独占和共享的逻辑公平锁类非公平锁类Sync继承AQS实现了独占和共享的逻辑 abstract static class Sync extends AbstractQueuedSynchronizer { static final int SHARED_SHIFT = 16; // 共享模式每次加1,用到了这个常量 static final int SHARED_UNIT = (1 << SHARED_SHI原创 2022-05-18 20:52:49 · 236 阅读 · 0 评论 -
JDK8 ThreadPoolExecutor源码理解
线程池是一种基于池化思想管理线程的工具,它能实现降低资源消耗-对于线程重复利用,避免反复创建线程造成开销提高响应速度-任务到达无需创建,直接执行便于管理-避免无限创建消耗资源,可以由线程池统一调度分配任务,提前预启动线程等,动态调整线程池参数便于监控-查看线程池线程使用线程数量,完成任务数量,阻塞队列等待任务数量等便于拓展-可以添加任务执行前、后以及执行结束的逻辑,还可以定时执行/*** ctl高3位标识线程池的运行状态* ctl低29位表示线程池中线程数。原创 2022-05-15 22:37:02 · 390 阅读 · 0 评论 -
JDK8 FutureTask源码分析
这里写目录标题一、概述1.1 FutureTask能够解决什么问题1.2 FutureTask如何保证线程安全二、关键知识点三、状态分析四、使用示例五、源码分析一、概述1.1 FutureTask能够解决什么问题内部持有Callable类型变量,可以获取线程返回值实现了Runnable接口,可以提交到线程池中运行,也可以直接被Thread执行实现了Future接口,调用get时可以阻塞到获取结果,也可以提前取消任务1.2 FutureTask如何保证线程安全使用了cas二、关键知识点原创 2022-05-08 20:37:45 · 439 阅读 · 0 评论 -
JDK8 CountDownLatch源码
一个线程await后被阻塞,直到n个线程countDown后才会被唤醒。package java.util.concurrent;import java.util.concurrent.locks.AbstractQueuedSynchronizer;public class CountDownLatch { private static final class Sync extends AbstractQueuedSynchronizer { private static f原创 2022-05-07 18:55:45 · 126 阅读 · 0 评论 -
JDK8 Semaphore源码
信号量。持有一些许可数,线程想要执行就要请求许可,请求不到许可则会被阻塞package java.util.concurrent;import java.util.Collection;import java.util.concurrent.locks.AbstractQueuedSynchronizer;/** * 信号量。持有一些许可数,线程想要执行就要请求许可,请求不到许可则会被阻塞 */public class Semaphore implements java.io.Seriali原创 2022-05-06 15:41:06 · 108 阅读 · 0 评论 -
JDK8 CyclicBarrier源码分析
一、作用CyclicBarrier 循环屏障,类似于起跑线阻塞运动员,所有线程到达屏障后才可以解除阻塞。并且可以重复使用(不像CountDownLatch减到0就无法使用了)。二、源码分析public class CyclicBarrier { /** * 分代,每代的屏障是否破坏 */ private static class Generation { boolean broken = false; } /** * 独原创 2022-05-06 14:37:32 · 344 阅读 · 1 评论 -
JDK8 ReentrantLock源码注释
package java.util.concurrent.locks;import java.util.concurrent.TimeUnit;import java.util.Collection;/** * 独占、可重入锁 */public class ReentrantLock implements Lock, java.io.Serializable { private static final long serialVersionUID = 73739848725724146原创 2022-04-24 21:30:12 · 453 阅读 · 0 评论 -
JDK8 LockSupport源码理解
LockSupport源码 Unsafe原创 2022-04-24 20:26:51 · 2488 阅读 · 0 评论 -
JDK8 ThreadLocal源码
package java.lang;import java.lang.ref.*;import java.util.Objects;import java.util.concurrent.atomic.AtomicInteger;import java.util.function.Supplier;public class ThreadLocal<T> { /** * 初始值为0 */ private final int threadLocalHa原创 2022-03-18 15:00:10 · 270 阅读 · 0 评论