messagequeue(4)
ʱ¼ä:2025-02-09 20:23:11 ±à¼:ÆÎÏɾý
3. class¡¡Objectϳ£ÓõÄÏ̺߳¯Êýwait()¡¢notify()ºÍnotifyAll()ÕâÈý¸öº¯ÊýÓÉjava.lang.ObjectÀàÌṩ£¬ÓÃÓÚе÷¶à¸öÏ̶߳Թ²ÏíÊý¾ÝµÄ´æÈ¡¡£3.1 wait()¡¢notify()ºÍnotifyAll()1) wait()º¯ÊýÓÐÁ½ÖÖÐÎʽ£ºµÚÒ»ÖÖÐÎʽ½ÓÊÜÒ»¸öºÁÃëÖµ£¬ÓÃÓÚÔÚÖ¸¶¨Ê±¼ä³¤¶ÈÄÚÔÝÍ£Ị̈߳¬Ê¹Ï߳̽øÈëÍ£ÖÍ״̬¡£µÚ¶þÖÖÐÎʽΪ²»´ø²ÎÊý£¬´ú±íwaite()ÔÚnotify()»ònotifyAll()֮ǰ»á³ÖÐøÍ£ÖÍ¡£2) µ±¶ÔÒ»¸ö¶ÔÏóÖ´ÐÐnotify()ʱ£¬»á´ÓÏ̵߳ȴý³ØÖÐÒÆ×߸ÃÈÎÒâÒ»¸öỊ̈߳¬²¢°ÑËü·Åµ½Ëø±êÖ¾µÈ´ý³ØÖУ»µ±¶ÔÒ»¸ö¶ÔÏóÖ´ÐÐnotifyAll()ʱ£¬»á´ÓÏ̵߳ȴý³ØÖÐÒÆ×ßËùÓиöÔÏóµÄËùÓÐỊ̈߳¬²¢°ÑËüÃǷŵ½Ëø±êÖ¾µÈ´ý³ØÖС£3) µ±µ÷ÓÃwait()ºó£¬Ï̻߳áÊͷŵôËüËùÕ¼Óеġ°Ëø±êÖ¾¡±£¬´Ó¶øÊ¹Ïß³ÌËùÔÚ¶ÔÏóÖÐµÄÆäËüsynchronizedÊý¾Ý¿É±»±ðµÄÏß³ÌʹÓá£Àý17£ºÏÂÃæ£¬ÎÒÃǽ«¶ÔÀý11ÖеÄÀý×Ó½øÐÐÐÞ¸Äclass TestThreadMethod extends Thread{public static int shareVar = 0;public TestThreadMethod(String name){super(name);}public synchronized void run(){if(shareVar==0){for(int i=0; i<10; i++){shareVar++;if(shareVar==5){try{this.wait();¡¡//£¨4£©}catch(InterruptedException e){}}}}if(shareVar!=0){System.out.print(Thread.currentThread().getName());System.out.println(" shareVar = " + shareVar);this.notify();¡¡//£¨5£©}}}public class TestThread{public static void main(String[] args){TestThreadMethod t1 = new TestThreadMethod("t1");TestThreadMethod t2 = new TestThreadMethod("t2");t1.start();¡¡//£¨1£©//t1.start();¡¡£¨2£©t2.start();¡¡//£¨3£©}}ÔËÐнá¹ûΪ£ºt2 shareVar = 5ÒòΪt1ºÍt2ÊÇÁ½¸ö²»Í¬¶ÔÏó£¬ËùÒÔÏß³Ìt2µ÷ÓôúÂ루5£©²»ÄÜ»½ÆðÏß³Ìt1¡£Èç¹ûÈ¥µô´úÂ루2£©µÄ×¢ÊÍ£¬²¢×¢Ê͵ô´úÂ루3£©£¬½á¹ûΪ£ºt1 shareVar = 5t1 shareVar = 10ÕâÊÇÒòΪ£¬µ±´úÂ루1£©µÄÏß³ÌÖ´Ðе½´úÂ루4£©Ê±£¬Ëü½øÈëÍ£ÖÍ״̬£¬²¢ÊͷŶÔÏóµÄËø×´Ì¬¡£½Ó×Å£¬´úÂ루2£©µÄÏß³ÌÖ´ÐÐrun()£¬ÓÉÓÚ´ËʱshareVarֵΪ5£¬ËùÒÔÖ´ÐдòÓ¡Óï¾ä²¢µ÷ÓôúÂ루5£©Ê¹´úÂ루1£©µÄÏ߳̽øÈë¿ÉÖ´ÐÐ״̬£¬È»ºó´úÂ루2£©µÄÏ߳̽áÊø¡£µ±´úÂ루1£©µÄÏß³ÌÖØÐÂÖ´Ðкó£¬Ëü½Ó×ÅÖ´ÐÐfor()Ñ»·Ò»Ö±µ½shareVar=10£¬È»ºó´òÓ¡shareVar¡£