《Java并发编程实战》读书笔记2_第五章:基础构建模块

第四章有点晦涩难懂,没记笔记,先跳过

同步容器类
同步容器类都是线程安全的,但是某种情况下可能需要额外的客户端加锁来保护符合操作。

并发容器
通过并发容器类代替同步容器,可以极大的提高伸缩性并降低风险。
ConcurrentHashMap 拥有分段所机制,任意数量的读线程可以并发的访问Map,执行读操作的线程和执行写操作的线程可以并发的访问Map,并且一定数量的写操作可以并发的修改Map.
CopyOnWriteArrayList 容器的线程安全性在于,只要正确的发布一个事实不可变的对象,那么在访问对象时就不再需要进一步的同步。
在构建高可用的应用程序时,有界队列是一种强大的资源管理工具:他们能抑制并防止产生过多的工作,使应用程序在符合过载的情况下变得更加强壮。

工作密取
在双队列中,所有消费者有一个共享的工作队列,而在工作密取设计中,每个消费者都各自的双端队列。如果一个消费者完成自己的双端队列中的全部工作,那么它可以从其他消费者的双端队列的末尾获取工作,密取工作模式比传统的生产者消费者模式有更高的伸缩性,这是因为工作线程不会在单个共享的任务队列上发生竞争,在大多数的时候,他们都是访问自己的双端队列,从而极大地减少了竞争。当工作者线程需要访问另外一个队列时,他从队列的尾部而不是从头部获取工作,因此进一步降低了队列上的竞争程度。

同步工具类
他们封装了一些状态,这些状态将决定执行同步工具类的线程是继续执行还是等待,此外还提供了一些方法对状态进行操作,以及对另一些方法用于高效的等待同步工具类进入预期状态。

闭锁
在闭锁打开前,所有线程都不能通过,一旦打开,线程都可以通过,并且一直保持开放状态。闭锁可以保证某些活动直到其他活动都完成后才执行。比如CountDownLatch、FutureTask。

栅栏
闭锁用于等待事件,闭锁用于等待其他线程。如果成功通过栅栏,那么await将为每个线程返回一个唯一的到达索引号,我们可以利用这些索引来“选举”产生一个领导线程,并在下一次迭代中由该领导线程执行一些特殊的工作。

猜你喜欢

转载自www.cnblogs.com/pjjlt/p/10779872.html