1、同步容器
同步容器类包括两部分,一个是Vector和Hashtable;另一个是他们的同系容器,同步包装(wrapper)类。同步容器都是线程安全的。
正如封装一个对象的状态,能够使它更加容易地保持不变约束一样,封装它的同步则可以迫使它符合同步策略。
同步容器通过对容器的所有状态进行串行访问,从而实现了它们的线程安全。
2、并发容器
用并发容器替换同步容器,这种作法以很小风险带来了可扩展性显著的提高。
ConcurrentHashMap取代同步Map、CopyOnWriteArrayList取代同步List
3、阻塞队列和生产者-消费者模式
阻塞队列(Blocking queue)提供了可阻塞的put和take方法,它们与定时的offer和poll是等价的。如果Queue已经满了,put方法会被阻塞直到有空间可用;如果Queue是空的,那么take方法会被阻塞,直到有元素可用。
该模式不会发现一个工作便立即处理,而是把工作置入一个任务(“to do”)清单中,以备后期处理。
有界队列是最强大的资源管理工具,用来建立可靠的应用程序:它们遏制那些可以产生过多工作量,具有威胁的活动,从而让你的程序在面对超负荷工作时更加健壮。
LinkedBlockingQueue、ArrayBlockingQueue是FIFO队列,但与LinkedList和ArrayList相似,但却拥有比同步List更好的并发性能。
PriorityBlockingQueue是一个按优先级顺序排序的队列。
SynchronizedQueue不是一个真正的队列,因为它不会为队列元素维护任何存储空间。不过,它维护一个队列的线程清单,这些线程等待把元素加入队列或者移出队列。(只有在消费者充足情况下适用)
Deque是一个双端队列,允许高效地在头和尾分别进行插入和移除。实现它们的是ArrayDeque和LinkedBlockingDeque。
4、Synchronizer
所有Synchronizer都共享有类似的结构特征性:它们封装状态,而这些状态决定着线程执行到在某一点是通过还是被迫等待;它们还提供操控状态的方法,以及高效地等待Synchronizer进入到期望状态的方法。
闭锁是一种Synchronizer,它可以延迟线程的进度直到线程到达终止状态。闭锁可用来确保特定活动直到其他活动完成后才发生。
CountDownLatch是一个灵活的闭锁实现,允许一个或多个线程等待一个事件的发生。FutureTask同样可以作为闭锁。
计算信号量(Counting semaphone)用来控制能够同时访问某特定资源的活动的数量,或者同时执行某一给定操作的数量。计数信号量可以用来实现资源池或者给一个容器限定边界。
5、为计算结果建立高效,可伸缩的高速缓存