1. 程式人生 > >Java並發-對象共享

Java並發-對象共享

處理 div 必須 通過 運行 存在 防止 聲明 class

我們不僅希望防止某個線程正在使用對象狀態而其他的線程正在修改該狀態,而且希望當一個線程修改了對象狀態後,其他的線程能夠看到發生的狀態變化。

可見性:當讀操作和寫操作在不同的線程中進行時,他們的動作是共享可見的。為了確保多個線程之間對內存寫入的操作是可見的,必須采用同步機制。

最低安全性:線程在沒有同步機制的情況下,至少獲得上一個有效值,而不是獲得一個隨機值。

Volatile變量:我們可以采用加鎖來實現線程同步,但是Java也提供了一種稍弱的同步機制,Volatile變量,用來確保變量的更新操作通知到其他的線程。當我們把某個變量聲明為Volatile變量後,編譯器和運行時都會註意到這個變量是共享的,因此不會講Volatile變量緩存在寄存器或者其他處理器不能看到的地方,因此我們對Volatile變量的讀入總會是最新寫入的值。采用Volatile變量可以有效的確保某個線程讀不到變量的最新值。

線程封閉:當訪問共享的可變數據時,通常需要使用同步,一種避免使用同步的方式就是不共享數據。如果僅僅在單線程內訪問數據,那麽就不需要同步,這種就是線程封閉。

棧封閉:在棧封閉中,只能通過局部變量才能訪問對象。

Java並發-對象共享