Java wait和notify結合使用

2021-08-03 03:49:56 字數 990 閱讀 3209

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 方法導致本執行緒放棄物件鎖,進入等待此物件的等待鎖定池,只有針對此物件...