真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

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

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

為企業(yè)提供成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、網(wǎng)站優(yōu)化、營(yíng)銷型網(wǎng)站、競(jìng)價(jià)托管、品牌運(yùn)營(yíng)等營(yíng)銷獲客服務(wù)。成都創(chuàng)新互聯(lián)擁有網(wǎng)絡(luò)營(yíng)銷運(yùn)營(yíng)團(tuán)隊(duì),以豐富的互聯(lián)網(wǎng)營(yíng)銷經(jīng)驗(yàn)助力企業(yè)精準(zhǔn)獲客,真正落地解決中小企業(yè)營(yíng)銷獲客難題,做到“讓獲客更簡(jiǎn)單”。自創(chuàng)立至今,成功用技術(shù)實(shí)力解決了企業(yè)“網(wǎng)站建設(shè)、網(wǎng)絡(luò)品牌塑造、網(wǎng)絡(luò)營(yíng)銷”三大難題,同時(shí)降低了營(yíng)銷成本,提高了有效客戶轉(zhuǎn)化率,獲得了眾多企業(yè)客戶的高度認(rèn)可!

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

在Java的并發(fā)編程中,synchronized這個(gè)詞在初期一定會(huì)被大量的使用,除非開發(fā)者熟悉J.U.C包中的相關(guān)工具類進(jìn)行替換。
這里synchronized也被稱為隱式鎖、內(nèi)置鎖或管程鎖,這三個(gè)都是指同一個(gè),看到的時(shí)候不必驚訝又出新概念了。這里的鎖似乎是看不到的,我們開發(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,會(huì)需要開發(fā)者進(jìn)行顯式鎖的獲取,釋放等操作,而且兩者的實(shí)現(xiàn)形式也不同。根據(jù)使用場(chǎng)景,如果需要更細(xì)粒度的控制鎖,可以使用J.U.C的實(shí)現(xiàn)。

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

public static volatile boolean shutDown = false;

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

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

public static volatile int count = 0;

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

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

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

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

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

否則你會(huì)遇到這個(gè)異常:

Exception in thread "main" java.lang.IllegalMonitorStateException

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

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。


當(dāng)前題目:Java并發(fā)編程相關(guān)概念及注意事項(xiàng)是什么
轉(zhuǎn)載來于:http://weahome.cn/article/giijjs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部