如题所述
Wait()ånotify():å¦ææ¡ä»¶ä¸æ»¡è¶³ï¼åçå¾
ãå½æ¡ä»¶æ»¡è¶³æ¶ï¼çå¾
该æ¡ä»¶ç线ç¨å°è¢«å¤éã
ä¸è¬ç¨å¨synchronizedæºå¶ä¸
ä¾å¦:
线ç¨A
synchronized(obj) {
while(!condition) {
obj.wait();
}
obj.doSomething();
}
å½çº¿ç¨Aè·å¾äºobjéåï¼åç°æ¡ä»¶conditionä¸æ»¡è¶³ï¼æ æ³ç»§ç»ä¸ä¸å¤çï¼äºæ¯çº¿ç¨Aå°±waitï¼ï¼ã
å¨å¦ä¸çº¿ç¨Bä¸ï¼å¦æBæ´æ¹äºæäºæ¡ä»¶ï¼ä½¿å¾çº¿ç¨Açconditionæ¡ä»¶æ»¡è¶³äºï¼å°±å¯ä»¥å¤é线ç¨Aï¼
线ç¨B
synchronized(obj) {
condition = true;
obj.notify();
}
éè¦æ³¨æçæ¦å¿µæ¯ï¼
ããâè°ç¨objçwaitï¼ï¼ï¼ notifyï¼ï¼æ¹æ³åï¼å¿ é¡»è·å¾objéï¼ä¹å°±æ¯å¿ é¡»åå¨synchronizedï¼objï¼ {â¦â¦} 代ç 段å ã
ããâè°ç¨obj.waitï¼ï¼åï¼çº¿ç¨Aå°±éæ¾äºobjçéï¼å¦å线ç¨Bæ æ³è·å¾objéï¼ä¹å°±æ æ³å¨synchronizedï¼objï¼ {â¦â¦} 代ç 段å å¤éA.
ããâå½obj.waitï¼ï¼æ¹æ³è¿ååï¼çº¿ç¨Aéè¦å次è·å¾objéï¼æè½ç»§ç»æ§è¡ã
ããâå¦æA1ï¼A2ï¼A3é½å¨obj.waitï¼ï¼ï¼åBè°ç¨obj.notifyï¼ï¼åªè½å¤éA1ï¼A2ï¼A3ä¸çä¸ä¸ªï¼å ·ä½åªä¸ä¸ªç±JVMå³å®ï¼ã
ããâobj.notifyAllï¼ï¼åè½å ¨é¨å¤éA1ï¼A2ï¼A3ï¼ä½æ¯è¦ç»§ç»æ§è¡obj.waitï¼ï¼çä¸ä¸æ¡è¯å¥ï¼å¿ é¡»è·å¾objéï¼å æ¤ï¼A1ï¼A2ï¼A3åªæä¸ä¸ªææºä¼è·å¾é继ç»æ§è¡ï¼ä¾å¦A1ï¼å ¶ä½çéè¦çå¾ A1éæ¾objéä¹åæè½ç»§ç»æ§è¡ã
ããâå½Bè°ç¨obj.notify/notifyAllçæ¶åï¼Bæ£ææobjéï¼å æ¤ï¼A1ï¼A2ï¼A3è½è¢«å¤éï¼ä½æ¯ä»æ æ³è·å¾objéãç´å°Béåºsynchronizedåï¼éæ¾objéåï¼A1ï¼A2ï¼A3ä¸çä¸ä¸ªæææºä¼è·å¾é继ç»æ§è¡ã
ä¸è¬ç¨å¨synchronizedæºå¶ä¸
ä¾å¦:
线ç¨A
synchronized(obj) {
while(!condition) {
obj.wait();
}
obj.doSomething();
}
å½çº¿ç¨Aè·å¾äºobjéåï¼åç°æ¡ä»¶conditionä¸æ»¡è¶³ï¼æ æ³ç»§ç»ä¸ä¸å¤çï¼äºæ¯çº¿ç¨Aå°±waitï¼ï¼ã
å¨å¦ä¸çº¿ç¨Bä¸ï¼å¦æBæ´æ¹äºæäºæ¡ä»¶ï¼ä½¿å¾çº¿ç¨Açconditionæ¡ä»¶æ»¡è¶³äºï¼å°±å¯ä»¥å¤é线ç¨Aï¼
线ç¨B
synchronized(obj) {
condition = true;
obj.notify();
}
éè¦æ³¨æçæ¦å¿µæ¯ï¼
ããâè°ç¨objçwaitï¼ï¼ï¼ notifyï¼ï¼æ¹æ³åï¼å¿ é¡»è·å¾objéï¼ä¹å°±æ¯å¿ é¡»åå¨synchronizedï¼objï¼ {â¦â¦} 代ç 段å ã
ããâè°ç¨obj.waitï¼ï¼åï¼çº¿ç¨Aå°±éæ¾äºobjçéï¼å¦å线ç¨Bæ æ³è·å¾objéï¼ä¹å°±æ æ³å¨synchronizedï¼objï¼ {â¦â¦} 代ç 段å å¤éA.
ããâå½obj.waitï¼ï¼æ¹æ³è¿ååï¼çº¿ç¨Aéè¦å次è·å¾objéï¼æè½ç»§ç»æ§è¡ã
ããâå¦æA1ï¼A2ï¼A3é½å¨obj.waitï¼ï¼ï¼åBè°ç¨obj.notifyï¼ï¼åªè½å¤éA1ï¼A2ï¼A3ä¸çä¸ä¸ªï¼å ·ä½åªä¸ä¸ªç±JVMå³å®ï¼ã
ããâobj.notifyAllï¼ï¼åè½å ¨é¨å¤éA1ï¼A2ï¼A3ï¼ä½æ¯è¦ç»§ç»æ§è¡obj.waitï¼ï¼çä¸ä¸æ¡è¯å¥ï¼å¿ é¡»è·å¾objéï¼å æ¤ï¼A1ï¼A2ï¼A3åªæä¸ä¸ªææºä¼è·å¾é继ç»æ§è¡ï¼ä¾å¦A1ï¼å ¶ä½çéè¦çå¾ A1éæ¾objéä¹åæè½ç»§ç»æ§è¡ã
ããâå½Bè°ç¨obj.notify/notifyAllçæ¶åï¼Bæ£ææobjéï¼å æ¤ï¼A1ï¼A2ï¼A3è½è¢«å¤éï¼ä½æ¯ä»æ æ³è·å¾objéãç´å°Béåºsynchronizedåï¼éæ¾objéåï¼A1ï¼A2ï¼A3ä¸çä¸ä¸ªæææºä¼è·å¾é继ç»æ§è¡ã
温馨提示:答案为网友推荐,仅供参考