回覆列表
  • 1 # ksfzhaohui

    Java記憶體模型就是為了解決多執行緒環境下共享變數的一致性問題,一致性主要包含三大特性:原子性、可見性、有序性;

    1.原子性

    一段程式開始不會被其他執行緒打斷,可以是一個操作也可以是多個操作,通過了synchronized和Lock關鍵字來保證操作的原子性;

    2.可見性

    指當一個執行緒修改了共享變數的值,其它執行緒能立即感知到這種變化;volatile變數保證了多執行緒環境下變數的可見性,但不能保證原子操作;

    除了volatile之外,還有兩個關鍵字也可以保證可見性,它們是synchronized和final;

    所以可以看到synchronized即可以保證原子性也可以保證可見性;

    3.有序性

    Java程式中,如果在本執行緒中觀察,所有的操作都是有序的;如果在另一個執行緒觀察,所有的操作都是無序的。前半句指的是執行緒內表現為序列的語義,後半句指的是指令重排序和主記憶體和工作記憶體同步延遲的問題;

    Java中提供了volatile和synchronized兩個關鍵字來保證有序性。

  • 中秋節和大豐收的關聯?
  • 潞城市微子鎮在哪裡?