進程是作業系統資源分配的基本單位,擁有獨立的記憶體空間;線程是 CPU 調度的基本單位,屬於進程內部的一條執行路徑。一個進程可包含多個線程,線程間共享進程的堆與方法區內存,但擁有獨立的程式計數器、虛擬機棧與本地方法棧。
同步方法隱式使用 this 或 Class 對象作為鎖,粒度較粗;同步代碼塊可指定任意對象為鎖,粒度更細,僅同步關鍵代碼,提升並發性能。
// 同步代碼塊示例
public void transfer(Account from, Account to, double amount) {
synchronized(from) {
synchronized(to) {
// 核心轉賬邏輯
}
}
}
監視器是 JVM 實現同步的核心機制,確保同一時間僅有一個線程執行同步代碼。死鎖發生條件:互斥、持有並等待、不可搶佔、循環等待。預防策略:統一鎖獲取順序,打破循環等待條件。