Java交流程序员

JUC(线程高级)

2018-04-28  本文已影响183人  周小鑫001

一。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.某一时刻只能有一个线程持有锁,无论有多少个方法

上一篇下一篇

猜你喜欢

热点阅读