探索java并发
文章平均质量分 95
记录自己的java并发,多线程学习点滴
GAMELOFT9
读万卷书,行万里路,知行合一。
展开
-
ReentrantLock原理剖析
ReentrantLock是最常用的锁API,在线程池ThreadPoolExecutor、阻塞队列LinkedBlockingQueue,同步工具CyclicBarrier等中都能看到它的身影。掌握好ReentrantLock的原理,可以让我们更加清楚基于它的实现的其他工具类的实现原理。ReentrantLock实现了类似Syncronized的同步能力,但它还支持了公平锁的能力。根据公平和非公平需要,ReentrantLock持有相应的公平或者非公平的同步器。原创 2023-05-03 13:07:27 · 841 阅读 · 0 评论 -
线程池核心线程是如何保持住的?
通过对线程池的学习,我们知道了线程池的执行流程:1、任务到来时,看CORE线程数有没有满,如果没有满则新创建线程处理。2、如果core线程数量满了,则放入队列中。3、如果队列也满了,则看看线程数量是否达到了maxPoolSize值,如果没有则创建新线程处理。4、如果已经达到了maxPoolSize的值,则根据拒绝策略处理任务。然后我们可以回答这些问题:1、核心线程池是如何保持住的?通过workQueue.take()方法对线程进行阻塞,让我们线程保持住不被数量-1而回收掉。原创 2023-04-29 16:27:53 · 2690 阅读 · 5 评论 -
聊聊synchronized关键字
接触java并发编程,用得最早最多的大概就是这个synchronized关键字了,synchronized是基于jvm实现的,不同于juc包的实现。发现想要讲好synchronized,并不容易。这里权当作抛砖引玉了。synchronized基本用法synchronized关键字可用于修饰方法和代码块。我们举例说明:假设我开了一家宠物店,客人可以到店里来撸猫,店子比较小每日只提供一只猫撸,猫...原创 2020-04-21 22:03:17 · 377 阅读 · 1 评论 -
LockSupport原理
LockSupport是一个非常基础而重要的类,它为java并发包里的锁和同步类提供了线程阻塞原语。没有它也就没有AQS,更没有上层的各类锁实现(例如ReentrantLock),同步器(例如CountdownLatch),阻塞队列等。LockSupport提供的都是静态方法,例如:public static void park();public static void unpark(Th...原创 2019-05-08 17:35:59 · 1227 阅读 · 0 评论 -
AtomicBoolean原理
AtomicBoolean是一个原子boolen类,用于高并发场景下的标记,例如某个只需初始化一次的服务:public class SomeService { private String name; private AtomicBoolean initialized = new AtomicBoolean(false); public String getName(...原创 2019-05-07 15:34:23 · 1108 阅读 · 0 评论 -
关于LongAdder的一点思考
LongAdder是jdk 1.8引入的一个类,宣称比AtomiLong更高效。它内部有一个基本数base和一个cell数组,在高并发的情况下各个线程将值存放在了数组中,在低并发的情况下直接在一个base数上做计算,取值的时候把基本数和cell数组中的值做累加返回。其实看到取值的时候我是懵的,取值的代码如下: public long sum() { Cell[] as = ce...原创 2019-05-06 10:31:03 · 481 阅读 · 0 评论