摘要:抽象锁 AbstractQueuedSynchronizer 很难去翻译这个词,抽象排队同步器?这里姑且叫抽象锁吧。 抽象锁只是一个抽象类,锁封装了一些锁的常规操作,包括信号量、倒数锁、可重入锁,内部代码都包含了抽象同步锁的实现类。 抽象同步锁用到了Unsafe类,Unsafe虽然在Java的基础包
阅读全文
摘要:可重入锁 其实 synchronized 就是一个可重入锁,而 ReentrantLock 具有与使用 synchronized 方法和语句所访问的隐式监视器锁相同的一些基本行为和语义,但 ReentrantLock 的功能更强大。 可重入锁“可重入”的意思就是:当前线程获取了一个锁,就可以进入任何
阅读全文
摘要:CyclicBarrier 直译是:循环屏障、可重用屏障。日常交流过程中,也可能称作:线程屏障。 跟信号量、倒数锁一样,都可以简单地实现“多个子线程执行完毕,主线程开始执行”的功能。 而屏障锁是其中较为特殊的: 几个线程互相等待,直到某个公共屏障点 (common barrier point),它们
阅读全文
摘要:CountDownLatch 倒数锁,顾名思义,需要给定一个初始值,每次调用计数减一,计数到达零之前,线程将一直受阻塞,计数到零之后,会释放所有等待的线程。 业务场景:主线程需要5个并发的初始化操作,5个线程全部执行完毕,主线程开始执行。 /** * @author ChenSS on 2018年2
阅读全文
摘要:Semaphore 直译:发出信号、打旗语,在编程中通常被称为:计数信号量,或者信号量。 举个生活案例 比如说旅店有10个单人间,有非常多的人要住; 最多只会只有10个人拿到钥匙; 没拿到钥匙的人非要住,那就只能等了; 而拿走钥匙的人,不住了那就必须退还钥匙,不然别人就没办法住。 信号量的使用类似于
阅读全文
摘要:场景描述 队列通常采用 FIFO(先进先出) 策略,可以满足多数情况下的开发需求,但是也有其不足之处。 例如: 我要小明帮我买早餐, 第一次,“小明,你后天帮我买牛奶吧!”, 过了一会儿,“小明,你明天帮我买豆浆呗!”。 这个案例中,我先叫小明买的牛奶,再叫他买的豆浆,如果按照普通队列,按顺序执行,
阅读全文
摘要:队列 Queue 在 java 中,继承自 Collection,多数的实现类位于 java.util.concurrent,与线程池位于同一个包下,大多数的队列都与线程和锁挂钩,少量位于 java.util,比如 LinkedList、PriorityQueue。 程序员最早接触的队列一般是 Li
阅读全文