2 回答

TA貢獻1826條經驗 獲得超6個贊
Atomic
是指AtomicInteger
吧?這種可以保證諸如在多線程下實現i++
這樣的功能,這個應該是用的最多的,因為傳統的int
類型的i++
并不是原子操作。

TA貢獻1847條經驗 獲得超11個贊
你說的Atomic是指Synchronized嗎,個人淺見是:
Synchronized比ReentrantLock進java標準早,因此一開始大家都是用它。相當于Java提供了一種封裝的互斥鎖機制,對于用戶來說,聲明成synchronized就可以拿到鎖的能力,而不用管具體是怎么加鎖解鎖的
使用簡便也是雙刃劍,synchronized的粒度較粗,可控性較差。比如無法中斷一個正在等候獲得鎖的線程,也無法通過投票得到鎖等等。很多場景不是一個互斥鎖就能搞定的。
所以Java搞了個java.util.concurrent.locks.Lock的接口,并實現了各種類型的鎖,其目的就是為了適應各種不同場景下的鎖需求,ReenTrantLock就是其中的一種。
ReenTrantLock也是一種互斥鎖,但它比Synchronized
提供了更多功能,比如tryLock,拿不到鎖立即返回等
可伸縮性更強??缮炜s性意味著在鎖競爭的時候能夠在調度上少花時間,提高吞吐率,更高效利用CPU
可編程性強,它是一個鎖對象,可以在代碼里面傳來傳去,比較靈活
不過ReenTrantLock用起來肯定沒有Synchronized方便,要顯式解鎖,一旦忘了就麻煩了
添加回答
舉報