摘要:概述 用于线程间数据的交换。它提供一个同步点,在这个同步点,两个线程可以交换彼此的数据。这两个线程通过exchange方法交换数据,如果第一个线程先执行exchange()方法,它会一直等待第二个线程也执行exchange方法,当两个线程都到达同步点时,这两个线程就可以交换数据,将本线程生产出来的数 阅读全文
posted @ 2017-11-05 12:59 在周末 阅读(934) 评论(0) 推荐(0) 编辑
摘要:概述 信号量(Semaphore)控制同时访问资源的线程数量,支持公平和非公平两种方式获取许可。 使用 提供的方法 使用示例: 使用信号量实现对内容池(例如线程池)的访问。 实现原理 基于AQS实现,用同步状态(state)表示许可数(permits),使用AQS的共享式获取和释放同步状态来实现pe 阅读全文
posted @ 2017-11-05 12:12 在周末 阅读(183) 评论(0) 推荐(0) 编辑
摘要:概述 CyclicBarrier是一个同步工具类,它允许一组线程互相等待,直到到达某个公共屏障点。与CountDownLatch不同的是该barrier在释放等待线程后可以重用,所以称它为循环(Cyclic)的屏障(Barrier)。 CyclicBarrier支持一个可选的Runnable命令,在 阅读全文
posted @ 2017-11-05 12:01 在周末 阅读(18573) 评论(1) 推荐(0) 编辑
摘要:概述 CountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行。 CountDownLatch使用一个计数器count实现,构建CountDownLatch时需要使用给定的count初始化CountDownLatch。在count到达0之前,调用a 阅读全文
posted @ 2017-11-05 11:12 在周末 阅读(269) 评论(0) 推荐(0) 编辑
摘要:概述 BlockingQueue支持两个附加操作的Queue:1)当Queue为空时,获取元素线程被阻塞直到Queue变为非空;2)当Queue满时,添加元素线程被阻塞直到Queue不满。BlockingQueue不允许元素为null,如果入队一个null元素,会抛NullPointerExcept 阅读全文
posted @ 2017-11-05 10:40 在周末 阅读(13533) 评论(1) 推荐(0) 编辑
摘要:概述 ReentrantReadWriteLock是Lock的另一种实现方式,我们已经知道了ReentrantLock是一个排他锁,同一时间只允许一个线程访问,而ReentrantReadWriteLock允许多个读线程同时访问,但不允许写线程和读线程、写线程和写线程同时访问。相对于排他锁,提高了并 阅读全文
posted @ 2017-11-05 09:13 在周末 阅读(28077) 评论(1) 推荐(7) 编辑