[171010-01]線程基礎(對象鎖、class鎖、同步、異步)
阿新 • • 發佈:2017-10-10
同步 表現 current 可見 性能 nbsp 異步 消耗cpu 基礎
synchronized、volatile、ReentrantLock、concurrent
線程安全:當多個線程訪問某一個類(對象或方法)時,這個類始終都能表現出正確的行為,那麽這個類(對象或方法)就是線程安全的
synchronized:可以在任意對象及方法上加鎖,而加鎖的這段代碼稱為“互拆區”或“臨界區”
鎖竟爭:要盡量避免(會消耗CPU資源)
class鎖和對象鎖:多線程多對象則會產生多個鎖(一個對象一個鎖),采用static synchronized修飾可避免多個鎖(class鎖無論N個對象均產生一個鎖)
同步和異步:
一個類兩個方法(一個同步方法,一個異步方法);兩個線程訪問同時分別訪問一個對象的同步方法和異步方法,執行異步方法無需等待同步方法執行完後;
一個類兩個方法(兩個均為同步方法);兩個線程訪問同時分別訪問一個對象的兩個同步方法,執行同步方法必須等待先執行的同步方法執行完後;
synchronized鎖重入:同步方法調用同步方法、父類同步方法調用子類同步方法
synchronized代碼塊:註意synchronized代碼塊的鎖,要避免用戶字符串常量
volatile概念:
修飾變量,主要作用是使變量在多個線程間可見(實現主內存和線程工作內存可見)
性能比synchronized強很多,不會造成阻塞;
volatile關鍵字非原子性(不具備同步性);只具有可見性沒有原子性(要實現原子性建議使用atomic類系列對象);
[171010-01]線程基礎(對象鎖、class鎖、同步、異步)