一、前言
二、鎖的建議
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占有的資源,形成一個程序等待環路