安全共享对象策略
1.线程限制 : 一个被线程限制的对象,由线程独占,并且只能被占有它的线程修改
2.共享只读 : 一个共享只读的对象,在没有额外同步的情况下,可以被多个线程并发访问,
但是任何线程都不能修改它
3.线程安全对象 : 一个线程安全的对象或则容器,在内部通过同步机制来保证线程安全,
所以其他线程无需额外的同步就可以通过公共接口随意访问它
4.被守护对象 : 被守护对象只能通过获取特定的锁来访问
线程安全 - 同步容器
采用synchronized关键字同步,缺点 :
不能完成做到线程安全
性能差
ArrayLisy -> Vector, Stack
HashMap -> HashTable (key、value不能为null)
Collections.synchronizedXXX(List、Set、Map)
线程安全 - 并发容器 J.U.C
ArrayList -> CopyOnWriteArrayList
HashSet、TreeSet -> CopyOnWriteArraySet ConcurrentSkipListSet
HashMap、TreeMap -> ConcurrentHashMap ConcurrentSkipListMap
AbstractQueuedSynchronizer - AQS
使用Node实现FIFO队列,可以用于构建锁或则其他同步装置的基础框架
利用一个int类型表示状态
使用方法是基础
子类通过继承并通过实现它的方法管理其状态 { acquire 和 release} 的方法操纵状态
可以同时实现排他锁和共享锁模式(独占、共享)
常用类
CountDownLatch
Semaphore
CyclicBarrier
ReentrantLock
Condition
FutureTask
CountDownLacth
CountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程执行完后再执行。例如,应用程序的主线程希望在负责启动框架服务的线程已经启动所有框架服务之后执行。
CountD