日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

Java并发机制深究1-synchronized和volatile

發(fā)布時(shí)間:2025/5/22 64 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java并发机制深究1-synchronized和volatile 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?在多線程并發(fā)編程中,synchronized和volatile都是很重要的,volatile是輕量級(jí)的synchronized。在多處理器編程中保證共享變量的統(tǒng)一性。

1.volatile的使用和原理

如果一個(gè)變量被聲明為volatile,java線程內(nèi)存模型確保所有線程中得到變量的值是一致的。

在對(duì)volatile修飾的變量進(jìn)行賦值操作時(shí)會(huì)引發(fā)兩個(gè)操作:

<1> 把當(dāng)前處理器緩沖行中的數(shù)據(jù)寫入內(nèi)存;

<2> 寫回內(nèi)存的操作會(huì)使其他cpu中緩存的數(shù)據(jù)無(wú)效。

2.synchronized的原理

Java中的每一個(gè)對(duì)象都可以作為鎖,具體表現(xiàn)為:

<1> 對(duì)于普通同步方法,鎖是當(dāng)前實(shí)例對(duì)象;

<2> 對(duì)于靜態(tài)同步方法,鎖是當(dāng)前class對(duì)象;

<3> 對(duì)于同步代碼塊,鎖是synchronized括號(hào)里配置的對(duì)象;

從jvm規(guī)范中可以看出synchronized的實(shí)現(xiàn)原理,jvm是根據(jù)monitor對(duì)象來(lái)實(shí)現(xiàn)的。代碼塊同步是根據(jù)monitorenter和monitorexit指令實(shí)現(xiàn)的。

monitorenter指令在編譯后插入到同步代碼塊的開(kāi)始位置,而monitorexit是插入到代碼塊的結(jié)束和異常處,jvm要保證monitorenter和monitorexit進(jìn)行配對(duì)。當(dāng)線程執(zhí)行到monitorenter指令時(shí),獲取對(duì)象所對(duì)應(yīng)的monitor的所有權(quán),獲得對(duì)象的鎖,此時(shí)其他線程訪問(wèn)此對(duì)象就處于阻塞狀態(tài)。當(dāng)執(zhí)行到monitorexit時(shí),線程會(huì)釋放掉鎖。

轉(zhuǎn)載于:https://www.cnblogs.com/wuyuetian/p/5498937.html

總結(jié)

以上是生活随笔為你收集整理的Java并发机制深究1-synchronized和volatile的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。