国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

多線程的可見(jiàn)性

sf190404 / 2622人閱讀

摘要:線程和進(jìn)程的區(qū)別可見(jiàn)性一個(gè)線程對(duì)共享變量值的修改,能夠及時(shí)的被其他線程看到。共享變量如果一個(gè)變量在多個(gè)線程的工作內(nèi)存中都存在副本,那么這個(gè)變量就是這幾個(gè)線程的共享變量。

線程和進(jìn)程的區(qū)別

可見(jiàn)性
一個(gè)線程對(duì)共享變量值的修改,能夠及時(shí)的被其他線程看到。
共享變量
如果一個(gè)變量在多個(gè)線程的工作內(nèi)存中都存在副本,那么這個(gè)變量就是這幾個(gè)線程的共享變量。
java內(nèi)存模型
Java memory model 描述了java程序中各種變量(線程共享變量)的訪問(wèn)規(guī)則,
以及在JVM中將變量存儲(chǔ)到內(nèi)存,以及從內(nèi)存中讀取變量的底層細(xì)節(jié)。

所有的變量都存儲(chǔ)在主內(nèi)存中
每個(gè)線程都有自己獨(dú)立的工作內(nèi)存,里面保存了該線程使用到的變量副本(主內(nèi)存中該變量的一個(gè)拷貝)

線程對(duì)共享變量的所有的操作都必須在自己的工作內(nèi)存中進(jìn)行,不能直接從主內(nèi)存中讀取

不同線程之間無(wú)法直接訪問(wèn)其他線程工作內(nèi)存中的變量,線程間變量值的傳遞需要通過(guò)住內(nèi)存來(lái)完成。
線程1對(duì)共享變量的修改要想被線程2及時(shí)的看到,必須要經(jīng)過(guò)2個(gè)步驟:
把工作內(nèi)存1中更新過(guò)的共享變量刷新到主內(nèi)存中。
將主內(nèi)存中最新的共享變量的值更新到工作內(nèi)存2中

可見(jiàn)性的實(shí)現(xiàn)方式:
synchronized
原子性(同步)
可見(jiàn)性
JMM關(guān)于synchronized的兩條規(guī)定
解鎖之前,必須把共享變量的最新值刷新到主內(nèi)存中
線程加鎖時(shí),將清空工作內(nèi)存中共享變量的值,從而使用共享變量時(shí)需要從主內(nèi)存中重新讀取最新值(枷鎖和解鎖需要是同一把鎖)

線程解鎖前對(duì)共享變量的修改在下次加鎖的時(shí)候?qū)ζ渌€程可見(jiàn)。

線程執(zhí)行互斥代碼的過(guò)程:
1,獲得互斥鎖
2,清空工作內(nèi)存
3,從主內(nèi)存拷貝變量的最新副本到工作內(nèi)存
4,執(zhí)行代碼
5,將更改后的共享變量值刷新到主內(nèi)存
6,釋放互斥鎖
重排序
代碼書寫的順序與實(shí)際執(zhí)行的順序不同,指令重排序是編譯器或是處理器為提高程序的性能而做的優(yōu)化
1,編譯器優(yōu)化的重排序(編譯器優(yōu)化)
2,指令級(jí)并行重排序(處理器優(yōu)化)
3,內(nèi)存系統(tǒng)重排序(處理器優(yōu)化)

as-if-serial:無(wú)論如何重排序,程序執(zhí)行的結(jié)果應(yīng)該與代碼順序執(zhí)行的結(jié)果一致
volatile

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/64743.html

相關(guān)文章

  • 【Java貓說(shuō)】Java線程之內(nèi)存可見(jiàn)(下篇)

    摘要:閱讀本文約分鐘上一次我們說(shuō)到互斥代碼的實(shí)現(xiàn)過(guò)程,如果有忘記或不清楚的可以去上篇看看。貓說(shuō)多線程之內(nèi)存可見(jiàn)性上篇今天我們了解下重排序。 閱讀本文約3分鐘 上一次我們說(shuō)到synchronized互斥代碼的實(shí)現(xiàn)過(guò)程,如果有忘記或不清楚的可以去上篇看看。【Java貓說(shuō)】Java多線程之內(nèi)存可見(jiàn)性(上篇) 今天我們了解下重排序。 其使代碼書寫的順序與實(shí)現(xiàn)執(zhí)行的順序不同,指令重排序是編譯器或處理...

    elliott_hu 評(píng)論0 收藏0
  • 慕課網(wǎng)_《細(xì)說(shuō)Java線程之內(nèi)存可見(jiàn)》學(xué)習(xí)總結(jié)

    時(shí)間:2017年07月09日星期日說(shuō)明:本文部分內(nèi)容均來(lái)自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)源碼:無(wú)學(xué)習(xí)源碼:https://github.com/zccodere/s... 第一章:課程簡(jiǎn)介 1-1 課程簡(jiǎn)介 課程目標(biāo)和學(xué)習(xí)內(nèi)容 共享變量在線程間的可見(jiàn)性 synchronized實(shí)現(xiàn)可見(jiàn)性 volatile實(shí)現(xiàn)可見(jiàn)性 指令重排序 as-if-seria...

    wupengyu 評(píng)論0 收藏0
  • 從Java線程可見(jiàn)談Happens-Before原則

    摘要:本文會(huì)先闡述在并發(fā)編程中解決的問(wèn)題多線程可見(jiàn)性,然后再詳細(xì)講解原則本身。所以與內(nèi)存之間的高速緩存就是導(dǎo)致線程可見(jiàn)性問(wèn)題的一個(gè)原因。原則上面討論了中多線程共享變量的可見(jiàn)性問(wèn)題及產(chǎn)生這種問(wèn)題的原因。 Happens-Before是一個(gè)非常抽象的概念,然而它又是學(xué)習(xí)Java并發(fā)編程不可跨域的部分。本文會(huì)先闡述Happens-Before在并發(fā)編程中解決的問(wèn)題——多線程可見(jiàn)性,然后再詳細(xì)講解H...

    MyFaith 評(píng)論0 收藏0
  • 【Java貓說(shuō)】Java線程之內(nèi)存可見(jiàn)(上篇)

    摘要:貓說(shuō)多線程之內(nèi)存可見(jiàn)性下篇?dú)g迎你留言討論屬于你的見(jiàn)解,畢竟每個(gè)人的味蕾都不一樣,這杯咖啡有吸引到你嗎好像又是一個(gè)槽糕的比喻本文已轉(zhuǎn)載個(gè)人技術(shù)公眾號(hào)歡迎留言討論與點(diǎn)贊上一篇推薦貓說(shuō)主數(shù)據(jù)類型和引用下一篇推薦貓說(shuō)多線程之內(nèi)存可見(jiàn)性下篇 閱讀本文約3分鐘 本文大致講述兩種線程實(shí)現(xiàn)的可見(jiàn)性,或許你已經(jīng)提前想到了,那說(shuō)明你的基礎(chǔ)很好,我們要聊聊synchronized實(shí)現(xiàn)可見(jiàn)性與volatil...

    khlbat 評(píng)論0 收藏0
  • java線程——volatile關(guān)鍵字

    摘要:多線程主要就是圍繞可見(jiàn)性和原子性這兩個(gè)特性展開的,關(guān)鍵字對(duì)應(yīng)著可見(jiàn)性,但很多時(shí)候人們誤以為使用了關(guān)鍵字后編寫多線程就沒(méi)問(wèn)題了,不知道它不能保證原子性。 說(shuō)起volatile和sychronized這兩個(gè)關(guān)鍵字,學(xué)習(xí)過(guò)多線程的同學(xué)應(yīng)該都很熟悉,在jdk1.5之前,主要就是靠這兩個(gè)關(guān)鍵字來(lái)做多線程編程的,但在jdk1.5以后,多了一個(gè)java.util.concurrent(JUC)包,里...

    W_BinaryTree 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

sf190404

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<