1. 程式人生 > >[171010-01]線程基礎(對象鎖、class鎖、同步、異步)

[171010-01]線程基礎(對象鎖、class鎖、同步、異步)

同步 表現 current 可見 性能 nbsp 異步 消耗cpu 基礎

synchronized、volatile、ReentrantLock、concurrent

線程安全:當多個線程訪問某一個類(對象或方法)時,這個類始終都能表現出正確的行為,那麽這個類(對象或方法)就是線程安全的

synchronized:可以在任意對象及方法上加鎖,而加鎖的這段代碼稱為“互拆區”或“臨界區”

鎖竟爭:要盡量避免(會消耗CPU資源)

class鎖和對象鎖:多線程多對象則會產生多個鎖(一個對象一個鎖),采用static synchronized修飾可避免多個鎖(class鎖無論N個對象均產生一個鎖)

同步和異步:

一個類兩個方法(一個同步方法,一個異步方法);兩個線程訪問同時分別訪問一個對象的同步方法和異步方法,執行異步方法無需等待同步方法執行完後;

一個類兩個方法(兩個均為同步方法);兩個線程訪問同時分別訪問一個對象的兩個同步方法,執行同步方法必須等待先執行的同步方法執行完後;

synchronized鎖重入:同步方法調用同步方法、父類同步方法調用子類同步方法

synchronized代碼塊:註意synchronized代碼塊的鎖,要避免用戶字符串常量

volatile概念:

      修飾變量,主要作用是使變量在多個線程間可見(實現主內存和線程工作內存可見)

      性能比synchronized強很多,不會造成阻塞;

      volatile關鍵字非原子性(不具備同步性);只具有可見性沒有原子性(要實現原子性建議使用atomic類系列對象);

[171010-01]線程基礎(對象鎖、class鎖、同步、異步)