在 Java 5.0 提供了 java.util.concurrent (简称JUC )包,在此包中增加了在并发编程中很常用的实用工具类,用于定义类似于线程的自定义子系统,包括线程池、异步 IO 和轻量级任务框架。提供可调的、灵活的线程池。还提供了设计用于多线程上下文中的 Collection 实现等。
Java 提供了一种稍弱的同步机制,即 volatile 变量,用来确保将变量的更新操作通知到其他线程。可以将 volatile 看做一个轻量级的锁,但是又与锁有些不同:
ConcurrentHashMap
、ConcurrentSkipListMap
,ConcurrentSkipListSet
、CopyOnWriteArrayList
和 CopyOnWriteArraySet
。当期望许多线程访问一个给定 collection 时,ConcurrentHashMap
通常优于同步的 HashMap
,ConcurrentSkipListMap
通常优于同步的 TreeMap。当期望的读数和遍历远远大于列表的更新数时 CopyOnWriteArrayList
优于同步的 ArrayList
。编写一个程序,开启 3 个线程,这三个线程的 ID 分别为A、B、C,每个线程将自己的 ID 在屏幕上打印 10 遍,要 求输出的结果必须按顺序显示。如:ABCABCABC…… 依次递归
Fork/Join 框架:就是在必要的情况下,将一个大任务,进行拆分(fork)成若干个小任务(拆到不可再拆时),再将一个个的小任务运算的结果进行 join 汇总。