JUC(线程高级)
一。volatile 关键字:当多个线程进行操作共享数据时。可以保证内存中数据的可见
volatile相较于synchronized 是一种轻量级的同步策略
注意事项:volatile 不具备 “互斥性”
volatile 不能保证变量的 “原子性”
二。原子变量。jdk1.5以后java.util.concurrent.atomic 包下提供了常用的原子变量
1.volation 保证内存可见性
2.CAS 算法保证了数据的原子性:
CAS算法是硬件对于并发操作共享数据的支持
CAS包含了三个操作数,1.内存值V,2.预估值A。3更新值B,(当且仅当V==A时,V=B可以,否则什么都不做)
三。ConcurrentHasp同步容器类是java5增加的线程安全的哈希表,对多线程的操作,介于hashMap和Hashtable之间,
内部采用了‘锁分段’ 机制代理Hash的独占锁,进而提高性能
四。CountDownLatch,一个同步辅助类,在完成一组蒸菜其他线程中执行的操作之前,它允许,一个或多个线程一直等待
闭锁:在完成某些运算时,只有其它线程运算全部完成,当前运算才会进行
五。condition
condition 接口是描述了可能会与锁有管理的条件变量,这些变量在用法上,使用Object.wait 访问的隐式监听器类似,但提供了更强大的功能,需要特别指出的是,单个lock可以与多个从condition对象管理,,condition方法的名称与对应的Object 版本中的不同,
conditon中,notity ,wait, notifyAll方法对应的分别是,single,await,singleAll
condition 实例实质上被绑定到一个锁上,要为特定的Lock 实例获的condition实例,请使用其newCondition方法。
六,ReaderWriteLock(乐观锁)
“写写/读写 " 需要互斥
读读之间不需要互斥
七。锁的一些使用方法注意事项:
1.非静态方法的锁默认为this,静态方法的锁为对应的class实例
2.某一时刻只能有一个线程持有锁,无论有多少个方法