java并发-读书笔记
- 锁的作用
1.独占的方式访问变量
2.使变量的修改对于其他的线程具有可见性 - 锁的劣势
1.当多个线程争取同一个锁时,未获的锁的失败的线程会挂起,等待锁的分配,在稍后被分配到锁的资源后,才会被重新唤醒,调度执行。在这个挂起和恢复的过程中,存在着开销+较长时间的中断。
2.活性问题,线程可能永久阻塞。
3.优先级反转。
锁是一种悲观的解决方法。
volatile:只提供了可见性,不能用来解决变量依赖的同步问题。
CAS:compareAndSwap,compareAndSet
volatile boolean ret =false;
Unsafe unsafe = Unsafe.getUnsafe();
Integer obj = new Integer(4);
while(!ret)
ret = unsafe.compareAndSwapInt(obj,1,1,2);
CAS:通过循环检查变量值的改变来获得对变量的改变,从而实现同步。
ABA问题:可以通过添加版本号或者打标签来避免