注:此文为学习《疯狂Java讲义》的笔记,因此内容全部来自于该书中。
1.ThreadLocal类
ThreadLocal,线程局部变量,为每一个使用该变量的线程提供一个变量值的副本,是每一个线程都可以独立地改变自己的副本而不会和其他线程的副本冲突。
T get():返回此线程局部变量中当前线程的值。
void remove():删除此线程局部变量中当前线程的值。
void set(T value):设置此线程局部变量中当前线程副本中的值。
同步机制是为了多个线程对相同资源的并发访问,是多个线程之间进行通信的有效访问。ThreadLocal是为了隔离多个线程的数据共享,从根本上避免多个线程之间对共享资源的竞争,不需要对多个线程进行同步。
如果多个线程之间需要共享资源的竞争,以达到线程之间的通信功能,使用同步机制。如果仅需要隔离多个线程之间的共享冲突,使用ThreadLocal。
2.包装线程不安全的集合
Modifier and Type |
Method and Description |
|
synchronizedCollection Returns a synchronized (thread-safe) collection backed by the specified collection. |
|
synchronizedList Returns a synchronized (thread-safe) list backed by the specified list. |
|
synchronizedMap Returns a synchronized (thread-safe) map backed by the specified map. |
|
synchronizedSet Returns a synchronized (thread-safe) set backed by the specified set. |
|
synchronizedSortedMap Returns a synchronized (thread-safe) sorted map backed by the specified sorted map. |
|
synchronizedSortedSet Returns a synchronized (thread-safe) sorted set backed by the specified sorted set. |
3.线程安全的集合类
以Concurrent开头的集合类,ConcurrentHashMap、ConcurrentSkipListMap、ConcurrentSkipListSet、ConcurrentLinkedQueue、ConcurrentLinkedDeque。
以CopyOnWrite开头的集合类,如CopyOnWriteArrayList、CopyOnWriteArraySet。
以Concurrent开头的集合类的读取操作不必锁定。
默认情况,ConcurrentHashMap支持16个线程并发写入。