1、**示例
public
class testsyncro2
});thread t2 = new thread(new runnable()
});t1.start();
t2.start();
}}class customer catch(exception ex)
}this.amount -= amount;
system.out.println(thread.currentthread().getname() + " print " + this.amount);
system.out.println("withdraw end....");
}public synchronized void
deposit(int amount) catch (interruptedexception e)
system.out.println("deposit end....");
} }
2、執行結果
withdraw start...
.less for withdraw, waiting for deposit...
deposit start...
.thread
-1 print 20000
deposit end...
.thread
-0 print 5000
withdraw end...
.
3、結論
(1)wait會釋放物件鎖,並進入等待狀態,直到另乙個執行緒notify
(2)notify一次只隨機通知乙個執行緒進行喚醒,在執行了notify方法之後,當前執行緒不會馬上釋放該物件鎖,呈wait狀態的執行緒也不能馬上獲得該物件鎖,要等到執行notify方法的執行緒將程式執行完 ,也就是退出sychronized**塊後,當前執行緒才會釋放鎖,處於wait狀態的執行緒才可以獲取該物件鎖
wait 和notify 入門例子
也就是說,wait 會讓出物件鎖,同時,當前執行緒休眠,等待被喚醒,如果不被喚醒,就一直等在那兒。notify 並不會讓當前執行緒休眠,但會喚醒休眠的執行緒。先看第乙個例子!public class threadf catch interruptedexception e system.out.pr...
notify和notifyAll的區別
鎖池entrylist 等待池waitset 鎖池 假設執行緒a已經擁有了某個物件 不是類 的鎖,而其他執行緒b,c想要呼叫這個物件的某個synchronized方法 或者塊 由於b,c執行緒在進入物件的synchronized方法 或者塊 之前就必須先獲得該物件鎖的擁有權,而恰巧該物件的鎖目前正被...
java wait 和sleep 方法之經驗談
sleep 是執行緒類 thread 的方法,導致此執行緒暫停執行指定時間,給執行機會給其他執行緒,但是監控狀態依然保持,到時後會自動恢復。呼叫sleep 不會釋放物件鎖。wait 是object 類的方法,對此物件呼叫wait 方法導致本執行緒放棄物件鎖,進入等待此物件的等待鎖定池,只有針對此物件...