Loading

摘要: 1.简介 在JDK1.6中的java.util.concurrent的子包locks中引了LockSupport这个API,LockSupport是一个比较底层的工具类,用来创建锁和其他同步工具类的基本线程阻塞原语。java锁和同步器框架的核心 AQS: AbstractQueuedSynchron 阅读全文
posted @ 2022-01-24 23:43 ZT丶 阅读(77) 评论(0) 推荐(0) 编辑
摘要: 1.概念 Exchanger用于线程间进行通信、数据交换。Exchanger提供了一个同步点exchange方法,两个线程调用exchange方法时,无论调用时间先后,两个线程会互相等到线程到达exchange方法调用点,此时两个线程可以交换数据,将本线程产出数据传递给对方。 2.使用 import 阅读全文
posted @ 2022-01-24 23:42 ZT丶 阅读(59) 评论(0) 推荐(0) 编辑
摘要: 1.概念 读写锁的概念其实就是共享锁和排他锁,读锁就是共享锁,写锁就是排他锁。 2.使用 import java.util.Random; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReadWr 阅读全文
posted @ 2022-01-24 23:42 ZT丶 阅读(54) 评论(0) 推荐(0) 编辑
摘要: 1.概念 Phaser它就像是结合了CountDownLatch和CyclicBarrier,翻译一下叫阶段。Phaser是按照不同的阶段来对线程进行执行,就是它本身是维护着一个阶段这样的一个成员变量,当前我是执行到哪个阶段,是第0个,还是第1个阶段啊等等,每个阶段不同的时候这个线程都可以往前走,有 阅读全文
posted @ 2022-01-24 23:41 ZT丶 阅读(102) 评论(0) 推荐(0) 编辑
摘要: 1.概念 Semaphore是计数信号量。Semaphore管理一系列许可。每个acquire方法阻塞,直到有一个许可证可以获得然后拿走一个许可证;每个release方法增加一个许可,这可能会释放一个阻塞的acquire方法。然而,其实并没有实际的许可这个对象,Semaphore只是维持了一个可获得 阅读全文
posted @ 2022-01-24 23:40 ZT丶 阅读(34) 评论(0) 推荐(0) 编辑
摘要: 1.概念 循环栅栏,一个可循环利用的屏障,它的作用就是会让所有线程都等待完成后才会继续下一步行动。举个例子,就像生活中我们会约朋友们到某个餐厅一起吃饭,有些朋友可能会早到,有些朋友可能会晚到,但是这个餐厅规定必须等到所有人到齐之后才会让我们进去。这里的朋友们就是各个线程,餐厅就是 CyclicBar 阅读全文
posted @ 2022-01-24 23:39 ZT丶 阅读(36) 评论(0) 推荐(0) 编辑
摘要: 1.ReentrantLock简介 JDK中独占锁的实现除了使用关键字synchronized外还可以使用ReentrantLock。虽然在性能上ReentrantLock和synchronized没有什么区别,但ReentrantLock相比synchronized而言功能更加丰富,使用起来更为灵 阅读全文
posted @ 2022-01-24 23:38 ZT丶 阅读(80) 评论(0) 推荐(0) 编辑
摘要: 1.概念 CountDownLatch是一个同步工具类,用来协调多个线程之间的同步,或者说起到线程之间的通信(而不是用作互斥的作用)。 CountDownLatch能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行。使用一个计数器进行实现。计数器初始值为线程的数量。每一个线程完成自己任务后 阅读全文
posted @ 2022-01-24 23:38 ZT丶 阅读(37) 评论(0) 推荐(0) 编辑
摘要: 1.LongAdder简介 LongAdder效率高的原因 LongAdder的内部做了一个分段锁,类似于分段锁的概念。在它内部的时候,会把一个值放到一个数组里,比如说数组长度是4,最开始是0,1000个线程,250个线程锁在第一个数租元素里,以此类推,每一个都往上递增算出来结果在加到一起。 阅读全文
posted @ 2022-01-24 23:37 ZT丶 阅读(588) 评论(0) 推荐(0) 编辑