卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

java線程阻塞怎么解決 Java并發(fā)線程如何阻塞和喚醒?

Java并發(fā)線程如何阻塞和喚醒?Java并發(fā)線程的阻塞和喚醒可分幾類(lèi):1. synchronize基于JVM的對(duì)象頭來(lái)實(shí)現(xiàn),多線程爭(zhēng)搶同一個(gè)臨界資源時(shí)根據(jù)不同的鎖機(jī)制(自旋鎖、輕/重量級(jí)鎖)來(lái)進(jìn)行阻塞

Java并發(fā)線程如何阻塞和喚醒?

Java并發(fā)線程的阻塞和喚醒可分幾類(lèi):

1. synchronize

基于JVM的對(duì)象頭來(lái)實(shí)現(xiàn),多線程爭(zhēng)搶同一個(gè)臨界資源時(shí)根據(jù)不同的鎖機(jī)制(自旋鎖、輕/重量級(jí)鎖)來(lái)進(jìn)行阻塞和喚醒。

2. notify/wait,yeild等基礎(chǔ)機(jī)制

這里暫時(shí)略過(guò),大致實(shí)現(xiàn)原理是基于對(duì)象的同步隊(duì)列和后面的AQS很像。

3. 并發(fā)組件的基礎(chǔ)AQS

重點(diǎn)說(shuō)下AQS(AbstractQueuedSynchronizer),

因?yàn)檫@是jdk并發(fā)包實(shí)現(xiàn)的基礎(chǔ)(如Lock、BlockingQueue、CountdownLatch等)。

Aqs基本由一個(gè)volatile變量state和一個(gè)等待隊(duì)列來(lái)實(shí)現(xiàn),搶鎖時(shí)先CAS修改state,失敗以后就放到等待隊(duì)列里,并通過(guò)LockSupport將線程掛起。

當(dāng)鎖的擁有者釋放鎖時(shí)會(huì)通過(guò)LockSupport喚醒等待隊(duì)列的后續(xù)節(jié)點(diǎn),讓它再次去嘗試搶鎖(CAS修改state),如此反復(fù)。

掌握AQS的原理對(duì)理解jdk里很多并發(fā)組件非常有幫助。