10W+ 面試題,happens-before 規則
點選上方“業餘草”,選擇“置頂公眾號”
第一時間獲取技術乾貨和業界資訊!
今年的面試情況,被很多人吐槽。可能是人數和難度都有所增加。
昨天還有網友私信我,說面試被問到 happens-before 規則,我該怎麼回答?這個說來話長,給他發了幾個連結,並推薦他看看《2019 Java 高併發學習路線圖和必會的 50 道面試題!》這個。
過來一會他,又來了,說網上的解釋我看不懂。能不能讓我通俗的給他講一下。
關於 happens-before 規則,我有一篇文章(非公眾號)靠自然搜尋已經達到 10w+ 的閱讀了。
所以,就借這個時間給大家通俗的講一下 Happens-Before 吧。
happens-before 是從 JDK5 開始,java 使用新的 JSR -133 記憶體模型推出的一個規則。JSR-133 使用 happens-before 的概念來闡述操作之間的記憶體可見性。在 JMM 中,如果一個操作執行的結果需要對另一個操作可見,那麼這兩個操作之間必須要存在 happens-before 關係。這裡提到的兩個操作既可以是在一個執行緒之內,也可以是在不同執行緒之間。
與程式設計師密切相關的 happens-before 規則如下:
翻譯解釋如下:
程式次序規則:一個執行緒內,按照程式碼順序,書寫在前面的操作 happens-before 於書寫在後面的操作;
鎖定規則:一個 unLock 操作先行發生於後面對同一個鎖額 lock 操作;
volatile變數規則:對一個變數的寫操作先行發生於後面對這個變數的讀操作;
傳遞規則:如果操作A先行發生於操作B,而操作B又先行發生於操作C,則可以得出操作A先行發生於操作C;
執行緒啟動規則:Thread物件的start()方法先行發生於此執行緒的每個一個動作;
執行緒中斷規則:對執行緒interrupt()方法的呼叫先行發生於被中斷執行緒的程式碼檢測到中斷事件的發生;
執行緒終結規則:執行緒中所有的操作都先行發生於執行緒的終止檢測,我們可以通過Thread.join()方法結束、Thread.isAlive()的返回值手段檢測到執行緒已經終止執行;
物件終結規則:一個物件的初始化完成先行發生於他的finalize()方法的開始;
需要注意的是,兩個操作之間具有 happens-before 關係,並不意味著前一個操作必須要在後一個操作之前執行!happens-before 僅僅要求前一個操作(執行的結果)對後一個操作可見,且前一個操作按順序排在第二個操作之前(the first is visible to and ordered before the second)。happens- before 的定義很微妙,它可以看作 java 記憶體模型中的一條規則。
如果還有疑問,請加我微訊號:xmtxtt,備註“進群”,進群共同討論學習吧!
10T技術資源大放送!包括但不限於:C/C++,Linux,Python,Java,PHP,人工智慧,GO等等。在公眾號內回覆對應關鍵字或框架名字,即可免費獲取!!
你再主動一點點 我們就有故事了
相關文章
- Java記憶體模型以及happens-before規則Java記憶體模型APP
- JAVA記憶體模型和Happens-Before規則Java記憶體模型APP
- Happens-Before原則到底規定了什麼APP
- 25個有關Drools規則引擎的面試題面試題
- 面試中會遇到的正則題面試
- 規則引擎面臨的問題和挑戰 - brcommunityUnity
- 根據happens-before法則藉助同步APP
- 對線面試官:Mysql組合索引的生效規則面試MySql索引
- JMM 最最最核心的概念:Happens-before 原則APP
- 邦芒面試:面試時這些問題不能提,否則會被降分面試
- 體面編碼之命名規則
- HTML最新面試題(筆試面試題)HTML面試題筆試
- 面試題:面試經面試題
- 「面試題」20+Vue面試題整理面試題Vue
- 動態規劃2:面試題 17.16. 按摩師動態規劃面試題
- 面試題面試題
- react面試題 機試題React面試題
- 面試測試題面試
- 測試面試題面試題
- RabbitMQ面試專題,面試必看MQ面試
- FreeSWITCH測試撥號規則例項
- 面試題1:9月25日面試題面試題
- [面試題]事件迴圈經典面試題解析面試題事件
- 【面試】面試常見問題整理面試
- 【Java面試】JSP常見面試題!JavaJS面試題
- 【Java面試】Servlet常見面試題!JavaServlet面試題
- 【Java面試】 Javascript常見面試題!JavaScript面試題
- webpack面試題Web面試題
- Promise面試題Promise面試題
- 面試題-mysql面試題MySql
- 面試題1面試題
- vue 面試題Vue面試題
- JavaScript面試題JavaScript面試題
- vue面試題!!!Vue面試題
- 面試題2面試題
- redis面試題Redis面試題
- 面試題整理面試題
- mybatis面試題MyBatis面試題