电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Java內存模型之happens-before概念詳解

瀏覽:98日期:2022-08-10 17:11:15
簡介

happens-before是JMM的核心概念。理解happens-before是了解JMM的關鍵。

1、設計意圖

JMM的設計需要考慮兩個方面,分別是程序員角度和編譯器、處理器角度:

程序員角度,希望內存模型易于理解、易于編程。希望是一個強內存模型。 編譯器和處理器角度,希望減少對它們的束縛,以至于編譯器和處理器可以做更多的性能優化。希望是一個弱內存模型。

​因此JSR-133專家組設計JMM的核心目標就兩個:

為程序員提供足夠強的內存模型對編譯器和處理器的限制盡可能少

​下面通過一段代碼來看JSR-133如何實現這兩個目標:

double pi = 3.14;//Adouble r = 1.0;//Bdouble area = pi * r * r //C

上述代碼存在如下happens-before關系:

A happens-before B B happens-before C A happens-before C

這3個happens-before關系中,第二個和第三個是必須的,而第一個是非必須的(A、B操作之間重排序,程序執行結果不會發生改變)。JMM把happens-before要求禁止的重排序分為下面的兩類:

會改變程序執行結果的重排序 不會改變程序執行結果的重排序

JMM對這兩種不同性質的重排序,采取了不同的策略:

對于會改變程序執行結果的重排序,JMM要求編譯器和處理器必須禁止 對于不會改變程序執行結果的重排序,JMM不做要求(JMM運行)

JMM設計示意圖:

Java內存模型之happens-before概念詳解

JMM設計示意圖

總結:

JMM給程序員提供的happens-before規則能滿足程序員的需求。簡單易懂,具有足夠強的內存可見性保證。 JMM對編譯器和處理器的束縛盡可能少。遵循的原則是:不改變程序的執行結果(正確同步或單線程執行),編譯器和處理器可以任意優化。 2、happens-before的定義

起源:happens-before規則來源于Leslie Lamport《Time, Clocks and the Ordering of Events in a Distributed System》。該論文中使用happens-before來定義分布式系統中事件之間的偏序關系(partial ordering),該文中給出了一個分布式算法,能用來將偏序關系擴展為某種全序關系。

Java中的應用:JSR-133使用happens-before來指定兩個操作之間的執行順序。JMM可以通過happens-before關系向程序員提供跨線程的內存可見性保證。

《JSR-133:Java Memory Model and Thread Specification》對happens-before關系的定義如下:

如果操作A happens-before 操作B,那么A操作的執行結果將會對操作B可見,且操作A的執行順序排在操作B之前——JMM對程序員的承諾兩個操作存在happens-before關系,并不意味著Java平臺的具體實現必須按照happens-before的順序來執行。如果重排序不改變程序執行結果(與happens-before)規則一致,那么這種重排序是不非法的(JMM允許這種重排序)。——JMM對編譯器和處理器的束縛原則

happens-before和as-if-serial語義:從上述來看,happens-before和as-if-serial語義本質上是一回事

as-if-serial語義保證單線程內程序的執行結果不被改變,happens-before關系保證正確同步的多線程程序的執行結果不改變 as-if-serial語義給編程者一種單線程是按程序順序執行的幻境;happens-before關系給編程者一種正確同步的多線程是按照happens-before指定的順序執行的幻境。

兩者的目的都是為了在不改變程序執行結果的前提下,盡可能的提高程序的執行效率。

3、happens-before規則

《JSR-133:Java Memory Model and Thread Specification》定義了如下happens-before規則

程序順序規則 監視器鎖規則 volatile變量規則 傳遞性 start()規則 join()規則3.1 volatile寫-讀

volatile寫-讀建立的happens-before關系

Java內存模型之happens-before概念詳解

happens-before關系示意圖

分析上圖:

1 happens-before 2和3 happens-before 4由程序順序規則產生。由于編譯器和處理器遵循as-if-serial語義,也就是說,as-if-serial語義保證了程序順序規則。因此可以把程序順序規則看成是對as-if-serial語義的“封裝”。 2 happens-before 3 是有volatile規則產生。一個volatile變量的讀,總是能看到(任意線程)對這個volatile變量的最后寫入。 1 happens-before 4 是由傳遞性規則產生的。這里的傳遞性是由volatile的內存屏障插入策略和volatile的編譯器重排序規則來共同保證的。3.2 start()規則

假設線程A在執行的過程中,通過執行ThreadB.start()來啟動線程B;同時,假設線程A在執行ThreadB.start()之前修改了一個共享變量,線程B在執行后會讀取這些共享變量。start()程序對應的happens-before關系圖:

Java內存模型之happens-before概念詳解

分析上圖:

1 happens-before 2 由程序順序規則產生2 happens-before 4 由start規則產生 1 happens-before 4 由傳遞性規則產生

因此線程A執行ThreadB.start()之前對共享變量所做的修改,在線程B執行后都將確保對線程B可見。

3.3 join()規則

假設線程A執行的過程中,通過執行ThreadB.join()來等待線程B終止;則線程B在終止之前修改了一些共享變量,線程A從ThreadB.join()返回后會讀這些共享變量。join()程序的happens-before關系圖:

Java內存模型之happens-before概念詳解

分析上圖:

2 happens-before 4 由join()規則產生4 happens-before 5 由程序順序規則產生 2 happens-before 5 由傳遞性規則產生

因此線程A執行操作ThreadB.join()并成功返回,線程B中任意操作都將對線程A可見。

文章總結至《Java并發編程藝術》,下篇總結“雙重檢查所定與延遲初始化”,敬請關注。

以上就是Java內存模型之happens-before概念詳解的詳細內容,更多關于Java內存模型 happens-before的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
主站蜘蛛池模板: 质检报告_CE认证_FCC认证_SRRC认证_PSE认证_第三方检测机构-深圳市环测威检测技术有限公司 | 护栏打桩机-打桩机厂家-恒新重工 | 济南保安公司加盟挂靠-亮剑国际安保服务集团总部-山东保安公司|济南保安培训学校 | 浙江皓格药业有限公司| 右手官网|右手工业设计|外观设计公司|工业设计公司|产品创新设计|医疗产品结构设计|EMC产品结构设计 | 智成电子深圳tdk一级代理-提供TDK电容电感贴片蜂鸣器磁芯lambda电源代理经销,TDK代理商有哪些TDK一级代理商排名查询。-深圳tdk一级代理 | 热缩管切管机-超声波切带机-织带切带机-无纺布切布机-深圳市宸兴业科技有限公司 | 线材成型机,线材折弯机,线材成型机厂家,贝朗自动化设备有限公司1 | 【电子厂招聘_普工招工网_工厂招聘信息平台】-工立方打工网 | 防伪溯源|防窜货|微信二维码营销|兆信_行业内领先的防伪防窜货数字化营销解决方案供应商 | 机床导轨_导轨板_滚轮导轨-上海旻佑精密机械有限公司 | 不锈钢法兰-碳钢法兰-法兰盘生产加工厂家-[鼎捷峰]-不锈钢法兰-碳钢法兰-法兰盘生产加工厂家-[鼎捷峰] | 广州企亚 - 数码直喷、白墨印花、源头厂家、透气无手感方案服务商! | 塑胶跑道_学校塑胶跑道_塑胶球场_运动场材料厂家_中国塑胶跑道十大生产厂家_混合型塑胶跑道_透气型塑胶跑道-广东绿晨体育设施有限公司 | 标准件-非标紧固件-不锈钢螺栓-非标不锈钢螺丝-非标螺母厂家-三角牙锁紧自攻-南京宝宇标准件有限公司 | 专业甜品培训学校_广东糖水培训_奶茶培训_特色小吃培训_广州烘趣甜品培训机构 | CCE素质教育博览会 | CCE素博会 | 教育展 | 美育展 | 科教展 | 素质教育展 | 热缩管切管机-超声波切带机-织带切带机-无纺布切布机-深圳市宸兴业科技有限公司 | 氨水-液氨-工业氨水-氨水生产厂家-辽宁顺程化工 | POM塑料_PBT材料「进口」聚甲醛POM杜邦原料、加纤PBT塑料报价格找利隆塑料 | 泰安塞纳春天装饰公司【网站】 | 北京办公室装修,办公室设计,写字楼装修-北京金视觉装饰工程公司 北京成考网-北京成人高考网 | 金环宇|金环宇电线|金环宇电缆|金环宇电线电缆|深圳市金环宇电线电缆有限公司|金环宇电缆集团 | 干粉砂浆设备_干混砂浆生产线_腻子粉加工设备_石膏抹灰砂浆生产成套设备厂家_干粉混合设备_砂子烘干机--郑州铭将机械设备有限公司 | 高效节能电机_伺服主轴电机_铜转子电机_交流感应伺服电机_图片_型号_江苏智马科技有限公司 | 地脚螺栓_材质_标准-永年县德联地脚螺栓厂家 | 篷房[仓储-婚庆-展览-活动]生产厂家-江苏正德装配式帐篷有限公司 | 气体热式流量计-定量控制流量计(空气流量计厂家)-湖北南控仪表科技有限公司 | (中山|佛山|江门)环氧地坪漆,停车场地板漆,车库地板漆,聚氨酯地板漆-中山永旺地坪漆厂家 | 河南中整光饰机械有限公司-抛光机,去毛刺抛光机,精密镜面抛光机,全自动抛光机械设备 | VI设计-LOGO设计公司-品牌设计公司-包装设计公司-导视设计-杭州易象设计 | 热熔胶网膜|pes热熔网膜价格|eva热熔胶膜|热熔胶膜|tpu热熔胶膜厂家-苏州惠洋胶粘制品有限公司 | 深圳富泰鑫五金_五金冲压件加工_五金配件加工_精密零件加工厂 | 对夹式止回阀厂家,温州对夹式止回阀制造商--永嘉县润丰阀门有限公司 | 北京模型公司-工业模型-地产模型-施工模型-北京渝峰时代沙盘模型制作公司 | 电动卫生级调节阀,电动防爆球阀,电动软密封蝶阀,气动高压球阀,气动对夹蝶阀,气动V型调节球阀-上海川沪阀门有限公司 | 对夹式止回阀_对夹式蝶形止回阀_对夹式软密封止回阀_超薄型止回阀_不锈钢底阀-温州上炬阀门科技有限公司 | 杭州画室_十大画室_白墙画室_杭州美术培训_国美附中培训_附中考前培训_升学率高的画室_美术中考集训美术高考集训基地 | EPK超声波测厚仪,德国EPK测厚仪维修-上海树信仪器仪表有限公司 | 福州时代广告制作装饰有限公司-福州广告公司广告牌制作,福州展厅文化墙广告设计, | 智慧消防-消防物联网系统云平台 智能化的检漏仪_气密性测试仪_流量测试仪_流阻阻力测试仪_呼吸管快速检漏仪_连接器防水测试仪_车载镜头测试仪_奥图自动化科技 |