1. 线ç¨çæèµ·åå¤é
æèµ·å®é
ä¸æ¯è®©çº¿ç¨è¿å
¥âéå¯æ§è¡âç¶æä¸ï¼å¨è¿ä¸ªç¶æä¸CPUä¸ä¼åç»çº¿ç¨æ¶é´çï¼è¿å
¥è¿ä¸ªç¶æå¯ä»¥ç¨æ¥æåä¸ä¸ªçº¿ç¨çè¿è¡ï¼å¨çº¿ç¨æèµ·åï¼å¯ä»¥éè¿éæ°å¤é线ç¨æ¥ä½¿ä¹æ¢å¤è¿è¡ã
æèµ·çåå å¯è½æ¯å¦ä¸å ç§æ
åµï¼
ï¼1ï¼éè¿è°ç¨sleep()æ¹æ³ä½¿çº¿ç¨è¿å
¥ä¼ç ç¶æï¼çº¿ç¨å¨æå®æ¶é´å
ä¸ä¼è¿è¡ã
ï¼2ï¼éè¿è°ç¨join()æ¹æ³ä½¿çº¿ç¨æèµ·ï¼ä½¿èªå·±çå¾
å¦ä¸ä¸ªçº¿ç¨çç»æï¼ç´å°å¦ä¸ä¸ªçº¿ç¨æ§è¡å®æ¯ä¸ºæ¢ã
ï¼3ï¼éè¿è°ç¨wait()æ¹æ³ä½¿çº¿ç¨æèµ·ï¼ç´å°çº¿ç¨å¾å°äºnotify()ånotifyAll()æ¶æ¯ï¼çº¿ç¨æä¼è¿å
¥âå¯æ§è¡âç¶æã
ï¼4ï¼ä½¿ç¨suspendæ起线ç¨åï¼å¯ä»¥éè¿resumeæ¹æ³å¤é线ç¨ã
è½ç¶suspendåresumeå¯ä»¥å¾æ¹ä¾¿å°ä½¿çº¿ç¨æèµ·åå¤éï¼ä½ç±äºä½¿ç¨è¿ä¸¤ä¸ªæ¹æ³å¯è½ä¼é ææ»éï¼å æ¤ï¼è¿ä¸¤ä¸ªæ¹æ³è¢«æ è¯ä¸ºdeprecatedï¼æè®®ï¼æ è®°ï¼è¿è¡¨æå¨ä»¥åçjdkçæ¬ä¸è¿ä¸¤ä¸ªæ¹æ³å¯è½è¢«å é¤ï¼æ以尽éä¸è¦ä½¿ç¨è¿ä¸¤ä¸ªæ¹æ³æ¥æä½çº¿ç¨ã
è°ç¨sleep()ãyield()ãsuspend()çæ¶å并没æ被éæ¾é
è°ç¨wait()çæ¶åéæ¾å½å对象çé
wait()æ¹æ³è¡¨ç¤ºï¼æ¾å¼å½å对èµæºçå ææï¼ä¸ç´çå°æ线ç¨éç¥ï¼æä¼è¿è¡åé¢ç代ç ã
notify()æ¹æ³è¡¨ç¤ºï¼å½åç线ç¨å·²ç»æ¾å¼å¯¹èµæºçå æï¼éç¥çå¾
ç线ç¨æ¥è·å¾å¯¹èµæºçå ææï¼ä½æ¯åªæä¸ä¸ªçº¿ç¨è½å¤ä»waitç¶æä¸æ¢å¤ï¼ç¶å继ç»è¿è¡wait()åé¢çè¯å¥ã
notifyAll()æ¹æ³è¡¨ç¤ºï¼å½åç线ç¨å·²ç»æ¾å¼å¯¹èµæºçå æï¼éç¥ææççå¾
线ç¨ä»wait()æ¹æ³åçè¯å¥å¼å§è¿è¡ã
2.çå¾
åéå®ç°èµæºç«äº
çå¾
æºå¶ä¸éæºå¶æ¯å¯åå
³èçï¼å¯¹äºéè¦ç«äºçèµæºï¼é¦å
ç¨synchronizedç¡®ä¿è¿æ®µä»£ç åªè½ä¸ä¸ªçº¿ç¨æ§è¡ï¼å¯ä»¥å设置ä¸ä¸ªæ å¿ä½conditionå¤æ该èµæºæ¯å¦åå¤å¥½ï¼å¦æ没æï¼å该线ç¨éæ¾éï¼èªå·±è¿å
¥çå¾
ç¶æï¼ç´å°æ¥æ¶å°notifyï¼ç¨åºä»waitå¤ç»§ç»åä¸æ§è¡ã
synchronized(obj) {
while(!condition) {
obj.wait();
}
obj.doSomething();
}
以ä¸ç¨åºè¡¨ç¤ºåªæä¸ä¸ªçº¿ç¨Aè·å¾äºobjéåï¼åç°æ¡ä»¶conditionä¸æ»¡è¶³ï¼æ æ³ç»§ç»ä¸ä¸å¤çï¼äºæ¯çº¿ç¨Aéæ¾è¯¥éï¼è¿å
¥wait()ã
å¨å¦ä¸çº¿ç¨Bä¸ï¼å¦æBæ´æ¹äºæäºæ¡ä»¶ï¼ä½¿å¾çº¿ç¨Açconditionæ¡ä»¶æ»¡è¶³äºï¼å°±å¯ä»¥å¤é线ç¨Aï¼
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ä¸çä¸ä¸ªæææºä¼è·å¾é继ç»æ§è¡ã
温馨提示:内容为网友见解,仅供参考