- 阻塞同步 (bloking synchronize) 悲觀, 資源競爭就要鎖
執行緒---互斥 為因 同步為果
synchronized 同步區塊對同一條執行緒來說是可重入的, 不會出現自己卡死自己的情況
同步區塊在已進入的執行緒 完成之前, 會阻塞其他執行緒的進入
java執行緒是 映射到 作業系統 原生執行緒上的
阻塞或喚醒執行緒需要 ( 作業系統 從使用者狀態 換到核心狀態 的 ) 狀態轉換,
耗費許多處理器時間,可能比 使用者程式執行時間 還要久
synchronized 是重量級操作 (Heavy weight)
在通知系統主塞執行緒 , 進入核心狀態之前, 會先加入自旋鎖, 避免頻繁切入核心狀態
java.util.concurren (J.U.C) ReentrentLock重入鎖 實現 同步
公平鎖: 鎖解開後 有序的使用:反之 不公平, 競爭 鎖,
等待可中斷: 鎖被占用很久, 不等轉作其他任務
鎖對應多個條件: ReentrentLock 可直接多設幾個條件就好
synchronized 要多設幾個鎖
1.6之後 synchronized ReentrentLock 持平
- 非阻塞同步 (non-bloking synchronize), 衝突偵測, 重試 共用資料 直到不衝突
沒有留言:
張貼留言