2 回答

TA貢獻(xiàn)1826條經(jīng)驗(yàn) 獲得超6個(gè)贊
Atomic
是指AtomicInteger
吧?這種可以保證諸如在多線程下實(shí)現(xiàn)i++
這樣的功能,這個(gè)應(yīng)該是用的最多的,因?yàn)閭鹘y(tǒng)的int
類(lèi)型的i++
并不是原子操作。

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