天天看點

JAVA并發處理經驗(三)鎖的優化與注意

一、前言

二、鎖的建議

1、鎖的分化,具體可以借鑒block queue的take與put分鎖

2、鎖定定義塊合适,不适合太大也不适合太小

3、JAVA虛拟機自帶鎖一步步:

3.1 鎖偏向(統一程序直接進入同步)------》

3.2 輕量級鎖(開啟:-XX:+UseBiasedLockong)------》

3.3 自旋鎖(空循環,等待)-----》

3.4鎖消除(是否真需要同步分析,開啟逃逸分析:-XX:+EliminateLocks)

4、ThreadLocal工具,原理:開很多線程來做同一份工作。缺點:線程不安全,不能操作共享資料

應用場景:

5、牛叉:忘掉我們該死得鎖是喲高CAS操作,這麼做直接跟CPU交道适用Atomic Integer  long reference 等等,都可以适用。

6.1、互斥使用(資源獨占) 

一個資源每次隻能給一個程序使用 

6.2、不可強占(不可剝奪) 

資源申請者不能強行的從資源占有者手中奪取資源,資源隻能由占有者自願釋放 

6.3、請求和保持(部分配置設定,占有申請) 

一個程序在申請新的資源的同時保持對原有資源的占有(隻有這樣才是動态申請,動态配置設定) 

6.4、循環等待 

存在一個程序等待隊列 

{P1 , P2 , … , Pn}, 

其中P1等待P2占有的資源,P2等待P3占有的資源,…,Pn等待P1占有的資源,形成一個程序等待環路