溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

java并發(fā)編程重要概念是什么

發(fā)布時間:2022-01-14 10:49:53 來源:億速云 閱讀:133 作者:iii 欄目:大數(shù)據(jù)

本篇內(nèi)容介紹了“java并發(fā)編程重要概念是什么”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

并發(fā) VS 并行

多線程編程,一般又會稱為并發(fā)編程。而與如同孿生兄弟一般的一個概念,叫并行。

所謂并發(fā),是在多核之前就已經(jīng)存在的概念,多個線程通過交替執(zhí)行來實(shí)現(xiàn)任務(wù)的執(zhí)行。
而并行,更多的是指多核的基礎(chǔ)上,多個線程同時執(zhí)行。
就像我們?nèi)C,此時馬桶只有一個,正常的每次只有一個人在使用,這就是單線程執(zhí)行。
如果有兩個或多個人在等待,占有馬桶的人便秘,為了短作業(yè)優(yōu)先的原則,換下一個使用,這種每人使用一會兒是多線程并發(fā)執(zhí)行。

如果馬桶數(shù)大于等待人數(shù),人們可以直接使用, 同時進(jìn)行,這種則是多線程并行執(zhí)行。

刷墻

假設(shè)當(dāng)前要為一個房子刷顏料,而房子內(nèi)房間比較多。
一開始的時候,工人A一個人在干活,每天從早忙到晚,進(jìn)度緩慢。 (單線程執(zhí)行)

為了提升效率,工人A又找了一個幫手,我們稱之為工人B。(多線程)
兩個人里,A更擅長涂料的調(diào)配,而B更擅長墻面的粉刷。兩個人分工合作。在A調(diào)好涂料好,B開始粉刷。
A把配好的涂料放到桶里,B拿到桶,進(jìn)行粉刷工作。
整個配料包含最主要的三個步驟:

  • 加水

  • 增加涂料

  • 攪拌

有一天,B心里有事,心不在焉的。A剛把水倒到桶里,B就拿走桶使用它開始粉刷,做了不少無用功(由于不正確的執(zhí)行順序?qū)е碌慕Y(jié)果的情況,稱為競態(tài)條件)。

A發(fā)現(xiàn)自己桶里的東西,可能會在沒配好的時候,被B使用到(非原子操作)。為此,A搬到了一個小房間中,每次一桶涂料配好之后,才會放到涂料區(qū),B從這里拿到配好的料去進(jìn)行粉刷。

在A配料期間,桶都被A占用,B不再會像之前一樣,使用到調(diào)配了一半的料。(我們把A的一次配料工作稱為一次原子操作。同時認(rèn)為A的操作Happens-before B的操作)

A與B對桶的使用,兩人里,每次只能一人在使用。我們稱這種操作是互斥的,。

這種通過桶占有的方式來實(shí)現(xiàn)的鎖定,我們稱為隱式鎖。Java里稱為Monitor鎖管程鎖
而為了保證在小房間內(nèi)不被其他人打擾到,A每次配料期間,會在門上寫上工作中,請稍后,這樣別人看到后就不會再進(jìn)入房間打斷,這種形式的鎖定,我們稱為顯式鎖。

假設(shè)A與B的涂料交付是在公共區(qū)域的涂料區(qū)進(jìn)行,那么,每次A在小房間內(nèi)配好的料,對于B來說,并不知曉。只有A把料放到公共區(qū)域內(nèi),B才能使用到。(這就是多線程中常提到的內(nèi)存可見性)

再假設(shè)A放到公共區(qū)域的料,B有一段時間沒取走,被不知情的人帶走了。而之后不久,A又一次提供料到公共區(qū)域,此時B來取料,對于B來說,并不了解之前一次A曾提供過料。(這是并發(fā)中常提到的ABA問題)

“java并發(fā)編程重要概念是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI