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

java線程原理分析 Java并發(fā)線程如何阻塞和喚醒?

Java并發(fā)線程如何阻塞和喚醒?每個(gè)對(duì)象都有兩個(gè)方法wait和notify,以及同步。Java并發(fā)線程的阻塞和喚醒可以分為幾類:1.同步是基于JVM的對(duì)象頭實(shí)現(xiàn)的。當(dāng)多個(gè)線程競(jìng)爭(zhēng)同一個(gè)關(guān)鍵資源時(shí),它們

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

每個(gè)對(duì)象都有兩個(gè)方法wait和notify,以及同步。

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

1.同步是基于JVM的對(duì)象頭實(shí)現(xiàn)的。當(dāng)多個(gè)線程競(jìng)爭(zhēng)同一個(gè)關(guān)鍵資源時(shí),它們會(huì)根據(jù)不同的鎖機(jī)制(旋轉(zhuǎn)鎖、輕/重鎖)進(jìn)行阻塞和喚醒。

2.這里暫時(shí)跳過(guò)了notify/wait、yeild等基本機(jī)制,一般的實(shí)現(xiàn)原理是基于對(duì)象的同步隊(duì)列非常類似于后面的AQS。

3.并發(fā)組件的基本AQS側(cè)重于AQS(AbstractQueuedSynchronizer)。

因?yàn)檫@是jdk外包的基礎(chǔ)(比如Lock、BlockingQueue、CountdownLatch等。).

Aqs基本上是通過(guò)一個(gè)易變的變量狀態(tài)和一個(gè)等待隊(duì)列來(lái)實(shí)現(xiàn)的。在搶鎖時(shí),CAS先修改狀態(tài),失敗后放入等待隊(duì)列,通過(guò)LockSupport掛起線程。

當(dāng)鎖的擁有者釋放鎖時(shí),它會(huì)通過(guò)LockSupport喚醒等待隊(duì)列的后續(xù)節(jié)點(diǎn),讓它再次嘗試搶鎖(CAS修改狀態(tài)),以此類推。

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

()方法:以毫秒為單位,使線程處于阻塞狀態(tài),時(shí)間到了自動(dòng)喚醒。

()和resume()方法:掛起和喚醒線程,suspend e()使線程進(jìn)入阻塞狀態(tài),只有調(diào)用對(duì)應(yīng)的resume e()時(shí),線程才會(huì)進(jìn)入可執(zhí)行狀態(tài)。不建議這樣做,容易出現(xiàn)死鎖。

3.yield()方法:調(diào)用yield()的效果相當(dāng)于調(diào)度器認(rèn)為線程已經(jīng)執(zhí)行了足夠的時(shí)間,可以切換到另一個(gè)線程。

讓 下面我們就來(lái)談?wù)勥@三種??梢匀sdn看看,了解一下其他的。

java的線程安全是什么?誰(shuí)能一言以蔽之?

這真的可以 不要用一句話來(lái)概括。我寫了一篇關(guān)于線程安全的長(zhǎng)文,我提煉了下面這段話,基本夠理解了:

單線程不會(huì)有安全問(wèn)題,多線程編程會(huì)有安全問(wèn)題。根本問(wèn)題在于是否存在關(guān)鍵資源競(jìng)爭(zhēng)資源。如果多線程不會(huì)訪問(wèn)競(jìng)爭(zhēng)資源,就不會(huì)有安全問(wèn)題,否則會(huì)處理。

什么是競(jìng)爭(zhēng)資源,如下所示:

如果它們?cè)L問(wèn)它們上下文的資源,比如kafka消費(fèi)分區(qū)工作線程訪問(wèn)它們各自的存儲(chǔ),它們將不會(huì)互相干擾;

如果在一個(gè)要執(zhí)行的方法中只使用局部變量,它們不會(huì)互相干擾,因?yàn)樗鼈兾挥诟髯缘木€程堆棧中;

如果執(zhí)行的方法使用傳入的變量,即所謂的形參變量,取決于傳入的變量是否是對(duì)象。如果它只是一個(gè)普通的參數(shù),它不 沒(méi)關(guān)系。如果是對(duì)象,要看對(duì)象是不是同一個(gè)引用,不同的引用沒(méi)有關(guān)系。

如果在一個(gè)執(zhí)行的方法中使用了相同的引用,不管它是傳入的還是外部的全局變量,比如log4 的伐木工,唐 不要擔(dān)心,因?yàn)閘og4已經(jīng)完成了線程安全的編寫。

如果在執(zhí)行的方法中使用了相同的引用:

I)但只是讀而不寫,讀與讀之間沒(méi)有,也不 沒(méi)關(guān)系。

Ii)有所有的寫,但是寫不依賴于讀,也就是說(shuō),線程可以直接寫到覆蓋,而不需要獲得 "最新 "數(shù)據(jù),這種情況無(wú)關(guān)緊要;

Iii)兩者都是寫的,寫的時(shí)候要看最新的資料,所以需要處理;