摘要: 1.控制并发线程数的Semaphore Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,保证合理的使用公共资源。 线程可以通过acquire()方法来获取信号量的许可,当信号量中没有可用的许可的时候,线程阻塞,直到有可用的许可为止。线程可以通过release() 阅读全文
posted @ 2021-06-17 23:03 hanease 阅读(103) 评论(0) 推荐(0) 编辑
摘要: 1.CyclicBarrier 字面意思是可循环(Cyclic)使用的屏障(Barrier)。它要做的事情是让一组线程到达一个屏障(同步点)时被阻塞,直到最后一个线程到达屏障时候,屏障才会开门。所有被屏障拦截的线程才会运行。 2.常用的方法: CyclicBarrier(int parties) 创 阅读全文
posted @ 2021-06-17 23:02 hanease 阅读(376) 评论(0) 推荐(0) 编辑
摘要: CountDownLatch 是一个同步工具类,允许一个线程或者多个线程等待其他线程完成操作,再执行。 CountDownLatch(int count) 构造一个用给定计数初始化的 CountDownLatch。 // 使当前线程在锁存器倒计数至零之前一直等待,除非线程被中断。 void awai 阅读全文
posted @ 2021-06-17 22:58 hanease 阅读(300) 评论(0) 推荐(0) 编辑
摘要: 要点解说ReentrantLock在并发情况下只允许单个线程执行受保护的代码,而在大部分应用中都是读多写少,所以,如果使用ReentrantLock实现这种对共享数据的并发访问控制,将严重影响整体的性能。ReentrantReadWriteLock中提供的读取锁(ReadLock)可以实现并发访问下 阅读全文
posted @ 2021-06-17 22:43 hanease 阅读(87) 评论(0) 推荐(0) 编辑
摘要: 文章目录ReentrantLock简介AQS回顾ReentrantLock原理ReentrantLock结构非公平锁的实现原理lock方法获取锁tryRelease锁的释放公平锁的实现原理lock方法获取锁tryRelease锁的释放lockInterruptibly可中断方式获取锁tryLock超 阅读全文
posted @ 2021-06-17 22:12 hanease 阅读(1002) 评论(1) 推荐(0) 编辑
摘要: AQS底层实现原理用一句话总结就是:volatile + CAS + 一个虚拟的FIFO双向队列(CLH队列)。所以在了解AQS底层实现时,需要先深入了解一下CAS实现原理。 #名词解释(1)CAS:无锁的策略使用一种比较交换的技术(Compare And Swap)来鉴线程修改冲突,一旦检测到冲突 阅读全文
posted @ 2021-06-17 21:53 hanease 阅读(1536) 评论(0) 推荐(0) 编辑