av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

面試官:說(shuō)一下Java的共享內(nèi)存模型

前言

并發(fā)編程模型

我們之前給大家講了多線程的一些知識(shí),首先我們要知道的是在并發(fā)編程模型下會(huì)產(chǎn)生兩大問(wèn)題

創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、遠(yuǎn)安網(wǎng)絡(luò)推廣、成都微信小程序、遠(yuǎn)安網(wǎng)絡(luò)營(yíng)銷、遠(yuǎn)安企業(yè)策劃、遠(yuǎn)安品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供遠(yuǎn)安建站搭建服務(wù),24小時(shí)服務(wù)熱線:028-86922220,官方網(wǎng)址:www.cdcxhl.com

  • 線程之間如何通信
  • 線程之間如何同步

解決這兩個(gè)問(wèn)題主要有兩種并發(fā)模型:

  • 消息傳遞模型
  • 共享內(nèi)存模型

那么它們是如何解決的呢?

消息傳遞模型

如何通信 ?

線程之間沒(méi)有公共狀態(tài),必須通過(guò)發(fā)消息來(lái)顯式通信

如何同步 ?

發(fā)消息本身就是同步的,因此它是隱式的

共享內(nèi)存模型

如何通信 ?

線程之間共享程序的公共狀態(tài),通過(guò)讀寫內(nèi)存中的公共狀態(tài)來(lái)進(jìn)行隱式通信

如何同步 ?

需要顯示指定線程之間互斥執(zhí)行

在Java中使用的是第二種,共享內(nèi)存并發(fā)模型的方式

Java內(nèi)存模型結(jié)構(gòu)

首先說(shuō)一下運(yùn)行時(shí)數(shù)據(jù)區(qū),主要分為兩類

  • 線程共享區(qū),主要包含方法區(qū)和堆
  • 線程私有區(qū),主要包含 虛擬機(jī)棧,本地方法棧,程序計(jì)數(shù)器

對(duì)于每一個(gè)線程來(lái)說(shuō),棧都是私有的,堆是共享的,所以棧中的變量,比如局部變量,方法定義參數(shù)、異常處理器參數(shù),它們都不是共有的,所以內(nèi)存之間是不可見的,所以也不收內(nèi)存模型影響,而堆中的變量時(shí)共享的,所以又叫共享變量, 內(nèi)存可見性是針對(duì)共享變量

堆中一定就可見性嗎

堆中也會(huì)出現(xiàn)內(nèi)存不可見的問(wèn)題,怎么產(chǎn)生的呢?這是因?yàn)楝F(xiàn)代計(jì)算機(jī)為了高效,往往會(huì)在高速緩存區(qū)中緩存共享變量,因?yàn)閏pu訪問(wèn)緩存區(qū)比訪問(wèn)內(nèi)存要快得多。

所謂內(nèi)存不可見性,就是線程對(duì)某個(gè)共享變量在線程自己的緩沖中存在副本的時(shí)候?qū)χ鲀?nèi)存中共享變量的值是不可見的,看不見主存中的值。線程操作一個(gè)共享變量時(shí),它首先從主存中拉取并復(fù)制一份變量放置到自己的工作內(nèi)存中,然后在工作內(nèi)存中對(duì)變量進(jìn)行修改,處理完之后將工作內(nèi)存中的值重新寫回到主存中。所以在這個(gè)過(guò)程中,如果在緩存失效之前立即命中,就會(huì)導(dǎo)致更新過(guò)的主存中值不一致的問(wèn)題

在Java中,每個(gè)線程都有自己的本地內(nèi)存,存儲(chǔ)了該線程以讀、寫共享變量的副本,它是一個(gè)抽象的概念,線程之間的通信有內(nèi)存模型控制,簡(jiǎn)稱JMM

  • 所有的共享變量都存在主內(nèi)存中。
  • 每個(gè)線程都保存了一份該線程使用到的共享變量的副本。

所以「線程間通信必須經(jīng)過(guò)主內(nèi)存」,JMM規(guī)定,「線程對(duì)共享變量的所有操作都必須在自己的本地內(nèi)存中進(jìn)行,不能直接從主內(nèi)存中讀取」。

Java中的volatile關(guān)鍵字可以保證多線程操作共享變量的可見性以及禁止指令重排序,synchronized關(guān)鍵字不僅保證可見性,同時(shí)也保證了原子性(互斥性)。在更底層,JMM通過(guò)內(nèi)存屏障來(lái)實(shí)現(xiàn)內(nèi)存的可見性以及禁止重排序。為了程序員的方便理解,提出了happens-before,它更加的簡(jiǎn)單易懂,從而避免了程序員為了理解內(nèi)存可見性而去學(xué)習(xí)復(fù)雜的重排序規(guī)則以及這些規(guī)則的具體實(shí)現(xiàn)方法。

結(jié)束語(yǔ)

本節(jié)內(nèi)容可能不像之前那么好理解,比較抽象,所以本文也有不足的地方,大家自己可以多查查一些資料,綜合理解。?


網(wǎng)站題目:面試官:說(shuō)一下Java的共享內(nèi)存模型
本文地址:http://uogjgqi.cn/article/ccsggsi.html
掃二維碼與項(xiàng)目經(jīng)理溝通

我們?cè)谖⑿派?4小時(shí)期待你的聲音

解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流