馬士兵高併發(二)筆記

https://www.jianshu.com/p/bb5105303d85   CountDownLatch、Semaphore和CyclicBarrier。

一、ReentraLock
手動鎖,重入鎖 ReentranLock,可替代synchronize,更靈活

1、必須要手動釋放鎖,經常在finally中進行鎖釋放。

2、可以嘗試鎖定tryLock,或者指定時間內無法鎖定,線程可以決定是否繼續等待

3、lock.lockInterruptibly();代替lock.lock(), 可以對thread.interrupt()方法做出響應,打斷該線程。
lock.lock()鎖定的線程不可打斷的。使用lockInterruptibly();  就可以進行打斷

4、指定公平鎖(效率會相對低一點)
private static ReentrantLock lock = new ReentrantLock(true);//參數true爲公平鎖

5、Condition 
對比notifyAll() 能精準叫醒線程,效率更高

二、ThreadLocal 線程局部變量(空間換時間)
hibernate 中 session就存在ThreadLocal

不想線程1的改變讓線程2 知道,自己的線程的變量只有自己能用,隻影響當前線程
ThreadLocal<String>  t =  new ThreadLocal<>();

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