溫馨提示×

溫馨提示×

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

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

Java并發(fā)編程相關(guān)概念及注意事項是什么

發(fā)布時間:2021-10-23 17:43:45 來源:億速云 閱讀:154 作者:柒染 欄目:大數(shù)據(jù)

Java并發(fā)編程相關(guān)概念及注意事項是什么,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

相應(yīng)的概念在Java中的具體表現(xiàn)形式,以及使用中要注意的一些問題。

在Java的并發(fā)編程中,synchronized這個詞在初期一定會被大量的使用,除非開發(fā)者熟悉J.U.C包中的相關(guān)工具類進(jìn)行替換。
這里synchronized也被稱為隱式鎖、內(nèi)置鎖或管程鎖,這三個都是指同一個,看到的時候不必驚訝又出新概念了。這里的鎖似乎是看不到的,我們開發(fā)者只是通過關(guān)鍵詞進(jìn)行了使用,而不用關(guān)心鎖的獲取、釋放等細(xì)節(jié)。
而實(shí)質(zhì)上,隱式鎖,是通過在JVM指令層面,增加monitor enter 和exit相關(guān)的指令來實(shí)現(xiàn)。

例如下面的幾行代碼:

Object o = new Object();

public void test() {

synchronized(o) {

System.out.println(o);

}

}

轉(zhuǎn)換成的jvm指令如下,注意monitor指令


J.U.C中的重入鎖、讀寫鎖等,相比較synchronized,會需要開發(fā)者進(jìn)行顯式鎖的獲取,釋放等操作,而且兩者的實(shí)現(xiàn)形式也不同。根據(jù)使用場景,如果需要更細(xì)粒度的控制鎖,可以使用J.U.C的實(shí)現(xiàn)。

Java并發(fā)編程中,另一個會經(jīng)常會用到且容易被用錯的,就數(shù)volatile啦。
我們一般使用volatile進(jìn)行一些重要標(biāo)識的設(shè)置及判斷,例如這樣

public static volatile boolean shutDown = false;

這種情況下,當(dāng)其他線程在修改標(biāo)識后,對于后面執(zhí)行的線程,能夠保證可見性。

而對于這樣類型的聲明,僅僅用volatile就不能滿足:

public static volatile int count = 0;

如果此處,我們把count用做計數(shù)器,對于每個線程的請求,進(jìn)行count++。這種時候,結(jié)果并不會符合預(yù)期,除非我們又顯式的增加了鎖。

這是因為整個count++,并不是一個整體,雖然其形式上看著像是不可分割的。但其實(shí)際上是由取值,加1,賦值這幾步構(gòu)成。多線程執(zhí)行時,容易造成錯亂,最終結(jié)果不符合預(yù)期。

volatile也是實(shí)現(xiàn)不了的安全的count++的,畢竟它的作用是抑制CPU進(jìn)行指令重排序,對于寫和讀都是實(shí)時獲取最新結(jié)果,不受JMM的影響。為了實(shí)現(xiàn)安全的計數(shù)或遞增,是需要鎖的介入,來保證整個count++的操作是互斥的,在整個臨界區(qū)內(nèi),一個線程對count的操作不受其它線程的影響。

此外,Java并發(fā)編程中,在使用synchronized進(jìn)行鎖定時,需要注意的一個問題是:

在自己持有鎖之后,才能進(jìn)行鎖的waitnotify。

否則你會遇到這個異常:

Exception in thread "main" java.lang.IllegalMonitorStateException

就像一個人高喊著要把他的面包給你,但是他手里只有空氣…,而你把口水吐到了他有臉上   :)

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。

向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