当put函数插入数据 , 而队列满了的时候 , 会通过notFull.await让插入线程等待...., v + delta));
return v;
}
volatile关键字实现
volatile关键字主要有两个功能 :
线程间可见性 : 保证该变量的值在各个线程间都是获取最新的
阻止指令重排序...Java中锁膨胀的顺序为 : 无锁 , 偏向锁 , 轻量级锁 , 重量级锁
偏向锁 :
检查对象头的Mark Word中是否保存有线程ID , 如果有则认为当前锁处于偏向锁
如果没有则通过CAS设置对象头中的线程...ID , 如果成功 , 则代表从无锁成为偏向锁
如果CAS失败或者已经存在线程ID , 则当到线程安全时 , 会撤销偏向锁 , 升级成为轻量级锁
轻量级锁 :
多个线程竞争偏向锁导致偏向锁升级为轻量级锁...如果成功则获得锁,如果失败则先检查对象的 Mark Word 是否指向当前线程的栈帧如果是则说明已经获取锁,否则说明其它线程竞争锁则膨胀为重量级锁。