一、基本概念
1、原子性:操作不能被打斷,要麼成功要麼失敗。i++ 不是原子操作。
2、可見性:一個線程修改了數據,其他線程立刻可見。
3、順序性:
4、volatile 保證程序的可見性,和順序性。不能保證對複合操作(如i++)的原子性。
javap -v xxx.class
利用了CPU的指令:ACC_VOLATILE (jvm) >cpu 指令
場景:狀態標記
鎖或cas可以保證原子性。
5、synchronized 的使用:類,方法
普通方法:鎖的是對象。
靜態方法:鎖的是類。
方法塊:鎖的是synchronized 括號裏配置的對象。
6、Lock:
ReentrantLock: lock(), tryLock(), getOwner(), getQueueLength(),
getHoldCount(), getQueuedThreads().
condition
讀寫鎖
7、StampeLock :悲觀鎖。
底層實現: AbstractQueuedSynchronizer, 實現原理:對列+雙向鏈表
CountDownLatch:允許
二、semaphore信號量
允許多個線程同時訪問,信號量是對鎖的擴展,允許指定多個線程,同時訪問某一個資源。
構造函數
public Semaphore(int permits) // permits 信號量的准入數
public Semaphore(int permits, boolean fair) // fair 指定是否公平
.