synchronized 關鍵字,同一個對象之間互斥
synchronized static關鍵字, 同一個類的都互斥
其實是鎖機制的實現:
sychronized(obj){
}
相當於在塊開始處:lock-X(obj);塊結束處 unlock(obj); 先鎖住的對象後釋放
如果嵌套多個sychroized塊,相當於two-phase protocal -> 操作成爲transaction, 最外層的塊不會被其他有衝突的線程打斷
wait(),notify(),notifyAll()從synchronized塊內部才能發出;會釋放所持有的鎖
sleep()不會釋放所持有的鎖
線程之間的控制(開始,結束)一般保存一個變量來表示線程要不要終止。當線程在sleep狀態,不能檢查這個變量,可以catch到interruptException來,進入catch塊,跳出例如while循環語句
線程terminated後不能再被調用.start()
疑問:當object裏有線程這類東西時,它什麼時候會被回收?