併發編程

進程:運行在他自己的地址空間的自包容程序。

線程:進程中的單一順序控制流、子任務。

daemon後臺線程:非後臺線程結束,殺死所有後臺線程,並結束整個程序。

 

變量實例對象存於主存;每個線程私有一個工作內存,同時只能操作自身工作內存,不能訪問其他線程的工作內存。

由此引發,併發編程三個常見問題。

 

原子性

一個操作或者多個操作,要麼都執行,要麼都不執行,且中途無法打斷。

可見性

多個線程訪問同一個變量,變量發生了修改,其他線程能夠同步修改。

有序性

程序執行順序應該按照代碼的先後順序執行。

但由於處理器指令重排,多線程情況,應該有可能發生變數,導致執行結果與代碼順序不一致。

 

32位long和double會發生字撕裂,讀寫無法保證原子性。

併發編程一定要同時保證這三個問題解決,否者就發生意料之外的問題。

 

volatile

被volatile修飾的變量,保證不同線程的可見性;同時內存柵欄的方式禁止指令重排序。

但是volatile不保證原子性。

synchronized可同時保證原子性、可見性、有序性。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章