Java多線程學習筆記(四)volatile StampeLock semaphore

一、基本概念

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 指定是否公平

 

.


  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章