摘要:
1 前言 Exchanger(交换者)是一个用于线程间协作的工具类, 它可以在配对线程中配对并交换数据。每个线程都可以在exchange入口方法上携带数据,然后与相应的线程进行匹配,并在返回时接收配对线程的数据。它提供一个同步点,在这个同步点,两个线程可以交换彼此的数据。这两个线程通过exchang 阅读全文
摘要:
1 简介 Semaphore可翻译为信号量,它维护一组许可证, 每次尝试获取许可证时都将阻塞等待直到可获取,它才能获取到并解除阻塞状态。 Semaphore可以控制一些物理或逻辑资源的访问或使用,它常常用于限制线程数目。在实际开发中,可用作流量控制,特别对于一些公共资源有限的应用场景,如数据库连接, 阅读全文
摘要:
1 前言 CyclicBarrier是一种同步工具,它允许一组线程在到达一个公共的屏障点时阻塞等待,直到最后一个线程到达屏障点,屏障才能开启,此时所有被阻塞线程才能被唤醒从而继续执行。CyclicBarrier是一个可循环利用(cyclic)的的屏障(barrier),与CountDownLatch 阅读全文
摘要:
1 前言 CountDownLatch是一种同步辅助工具类,它允许一个或多个线程等待,直到在其他线程中执行的一组操作完成为止。(源码分析基于JDK1.8) CountDownLatch需要用给定的闩锁计数count初始化。await方法使当前线程阻塞(每执行一次countDown方法就将闩锁计数减1 阅读全文
摘要:
1 前言 在多线程程序中,如果多个线程同时更新一个共享变量,可能会出现预料之外的奇怪的值。普通的变量无法在多线程下做到可见性、一致性、原子性,也就无法保证线程安全。在JDK的java.util.concurrent.atomic包中提供许多原子操作类,它们可以简单、 高效、安全地更新一个变量。现在介 阅读全文
摘要:
1 前言 与普通队列相比,阻塞队列另外支持两个附加操作,这两个附加的操作支持阻塞的插入和移除方法。 ①支持阻塞的插入方法:当队列满时,队列会阻塞插入元素的线程,直到队列不满。 ②支持阻塞的移除方法:在队列为空时,获取元素的线程会等待队列变为非空。 一般的阻塞队列相比,只能在“尾部入队、在头部出队”, 阅读全文
摘要:
1 前言 与普通队列相比,阻塞队列另外支持两个附加操作,这两个附加的操作支持阻塞的插入和移除方法。 ①支持阻塞的插入方法:当队列满时,队列会阻塞插入元素的线程,直到队列不满。 ②支持阻塞的移除方法:在队列为空时,获取元素的线程会等待队列变为非空。 LinkedBlockingQueue继承于抽象类A 阅读全文
摘要:
1 前言 队列是一种在尾部添加元素、从头部删除元素的数据结构,而阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作支持阻塞的插入和移除方法。 ①支持阻塞的插入方法:当队列满时,队列会阻塞插入元素的线程,直到队列不满。 ②支持阻塞的移除方法:在队列为空时,获取元素的线 阅读全文
摘要:
1 前言 ScheduledThreadPoolExecutor是定时任务执行器,它可以通过构造方法创建,也可通过工厂类Executors的静态方法创建(本文基于JDK1.8)。 ScheduledThreadPoolExecutor继承自ThreadPoolExecutor,并实现了表示定时执行器 阅读全文
摘要:
1 前言 ThreadPoolExecutor的基本概念和用法已经在之前的文章线程池ThreadPoolExecutor简介 、Executor框架完整解读中做过详细的说明,这里主要基于JDK1.8对ThreadPoolExecutor从源码级别分析其实现原理。 ThreadPoolExecutor 阅读全文