°´¼üÅÌÉÏ·½Ïò¼ü ¡û »ò ¡ú ¿É¿ìËÙÉÏÏ·ҳ£¬°´¼üÅÌÉ쵀 Enter ¼ü¿É»Øµ½±¾ÊéĿ¼ҳ£¬°´¼üÅÌÉÏ·½Ïò¼ü ¡ü ¿É»Øµ½±¾Ò³¶¥²¿£¡
¡ª¡ª¡ª¡ªÎ´ÔĶÁÍꣿ¼ÓÈëÊéÇ©ÒѱãÏ´μÌÐøÔĶÁ£¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡491¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
Thread¡¡1£¨4£©¡¡¡¡
Thread¡¡1£¨3£©¡¡¡¡
Thread¡¡1£¨2£©¡¡¡¡
Thread¡¡2£¨5£©¡¡¡¡
Thread¡¡2£¨4£©¡¡¡¡
Thread¡¡2£¨3£©¡¡¡¡
Thread¡¡2£¨2£©¡¡¡¡
Thread¡¡2£¨1£©¡¡¡¡
Thread¡¡1£¨1£©¡¡¡¡
All¡¡Threads¡¡Started¡¡¡¡
Thread¡¡3£¨5£©¡¡¡¡
Thread¡¡4£¨5£©¡¡¡¡
Thread¡¡4£¨4£©¡¡¡¡
Thread¡¡4£¨3£©¡¡¡¡
Thread¡¡4£¨2£©¡¡¡¡
Thread¡¡4£¨1£©¡¡¡¡
Thread¡¡5£¨5£©¡¡¡¡
Thread¡¡5£¨4£©¡¡¡¡
Thread¡¡5£¨3£©¡¡¡¡
Thread¡¡5£¨2£©¡¡¡¡
Thread¡¡5£¨1£©¡¡¡¡
Thread¡¡3£¨4£©¡¡¡¡
Thread¡¡3£¨3£©¡¡¡¡
Thread¡¡3£¨2£©¡¡¡¡
Thread¡¡3£¨1£©¡¡¡¡
¡¡¡¡
¿É×¢Òâµ½Õâ¸öÀý×ÓÖе½´¦¶¼µ÷ÓÃÁË¡¡sleep£¨£©£¬È»¶øÊä³ö½á¹ûÖ¸³öÿ¸öÏ̶߳¼»ñµÃÁËÊôÓÚ×Ô¼ºµÄÄÇÒ»²¿·ÖCPU¡¡
Ö´ÐÐʱ¼ä¡£´ÓÖпÉÒÔ¿´³ö£¬¾¡¹Ü¡¡sleep£¨£©ÒÀÀµÒ»¸öÏ̵߳ĴæÔÚÀ´Ö´ÐУ¬µ«È´ÓëÔÊÐí»ò½ûÖ¹Ïß³ÌÎ޹ء£ËüÖ»²»¡¡
¹ýÊÇÁíÒ»¸ö²»Í¬µÄ·½·¨¶øÒÑ¡£¡¡¡¡
Òà¿É¿´³öÏ̲߳¢²»ÊÇ°´ËüÃÇ´´½¨Ê±µÄ˳ÐòÔËÐеġ£ÊÂʵÉÏ£¬CPU¡¡´¦ÀíÒ»¸öÏÖÓÐÏ̼߳¯µÄ˳ÐòÊDz»È·¶¨µÄ¡ª¡ª¡¡
³ý·ÇÎÒÃÇÇ××Ô½éÈ룬²¢ÓÃThread¡¡µÄsetPriority£¨£©·½·¨µ÷ÕûËüÃǵÄÓÅÏȼ¶¡£¡¡¡¡
main£¨£©´´½¨¡¡Thread¡¡¶ÔÏóʱ£¬Ëü²¢Î´²¶»ñÈκÎÒ»¸ö¶ÔÏóµÄ¾ä±ú¡£ÆÕͨ¶ÔÏó¶ÔÓÚÀ¬»øÊÕ¼¯À´ËµÊÇÒ»ÖÖ¡¡¡°¹«Æ½¾º¡¡
Èü¡±£¬µ«Ïß³ÌÈ´²¢·ÇÈç´Ë¡£Ã¿¸öÏ̶߳¼»á¡°×¢²á¡±×Ô¼º£¬ËùÒÔij´¦Êµ¼Ê´æÔÚ×ŶÔËüµÄÒ»¸öÒýÓá£ÕâÑùÒ»À´£¬¡¡
À¬»øÊÕ¼¯Æ÷±ãÖ»ºÃ¶ÔËü¡°îªÄ¿ÒÔ¶Ô¡±ÁË¡£¡¡¡¡
14¡£1¡£2¡¡Õë¶ÔÓû§½çÃæµÄ¶àÏ̡߳¡¡¡
ÏÖÔÚ£¬ÎÒÃÇÒ²ÐíÄÜÓÃÒ»¸öÏ߳̽â¾öÔÚ¡¡Counter1¡£java¡¡ÖгöÏÖµÄÎÊÌâ¡£²ÉÓõÄÒ»¸ö¼¼ÇɱãÊÇÔÚÒ»¸öÏ̵߳ġ¡run£¨£©¡¡
·½·¨ÖзÅÖá°×ÓÈÎÎñ¡±¡ª¡ªÒ༴λÓÚgo£¨£©¡¡ÄÚµÄÑ»·¡£Ò»µ©Óû§°´ÏÂStart¡¡°´Å¥£¬Ï߳̾ͻáÆô¶¯£¬µ«ÂíÉϽáÊø¡¡
Ï̵߳Ĵ´½¨¡£ÕâÑùÒ»À´£¬¾¡¹ÜÏß³ÌÈÔÔÚÔËÐУ¬µ«³ÌÐòµÄÖ÷Òª¹¤×÷È´ÄܵÃÒÔ¼ÌÐø£¨µÈºò²¢ÏìÓ¦Óû§½çÃæµÄÊ¡¡
¼þ£©¡£ÏÂÃæÊǾßÌåµÄ´úÂ룺¡¡¡¡
¡¡¡¡
//£º¡¡Counter2¡£java¡¡¡¡
//¡¡A¡¡responsive¡¡user¡¡interface¡¡with¡¡threads¡¡¡¡
import¡¡java¡£awt¡£*£»¡¡¡¡
import¡¡java¡£awt¡£event¡£*£»¡¡¡¡
import¡¡java¡£applet¡£*£»¡¡¡¡
¡¡¡¡
class¡¡SeparateSubTask¡¡extends¡¡Thread¡¡£û¡¡¡¡
¡¡¡¡private¡¡int¡¡count¡¡=¡¡0£»¡¡¡¡
¡¡¡¡private¡¡Counter2¡¡c2£»¡¡¡¡
¡¡¡¡private¡¡boolean¡¡runFlag¡¡=¡¡true£»¡¡¡¡
¡¡¡¡public¡¡SeparateSubTask£¨Counter2¡¡c2£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡490¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡492¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
¡¡¡¡¡¡¡¡this¡£c2¡¡=¡¡c2£»¡¡¡¡
¡¡¡¡¡¡¡¡start£¨£©£»¡¡¡¡
¡¡¡¡£ý¡¡¡¡
¡¡¡¡public¡¡void¡¡invertFlag£¨£©¡¡£û¡¡runFlag¡¡=¡¡£¡runFlag£»£ý¡¡¡¡
¡¡¡¡public¡¡void¡¡run£¨£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡while¡¡£¨true£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡¡¡try¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡sleep£¨100£©£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡£ý¡¡catch¡¡£¨InterruptedException¡¡e£©£û£ý¡¡¡¡
¡¡¡¡¡¡¡¡¡¡if£¨runFlag£©¡¡¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡c2¡£t¡£setText£¨Integer¡£toString£¨count£«£«£©£©£»¡¡¡¡
¡¡¡¡¡¡¡¡£ý¡¡¡¡
¡¡¡¡£ý¡¡¡¡
£ý¡¡¡¡¡¡
¡¡¡¡
public¡¡class¡¡Counter2¡¡extends¡¡Applet¡¡£û¡¡¡¡
¡¡¡¡TextField¡¡t¡¡=¡¡new¡¡TextField£¨10£©£»¡¡¡¡
¡¡¡¡private¡¡SeparateSubTask¡¡sp¡¡=¡¡null£»¡¡¡¡
¡¡¡¡private¡¡Button¡¡¡¡¡¡
¡¡¡¡¡¡¡¡onOff¡¡=¡¡new¡¡Button£¨¡¨Toggle¡¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡start¡¡=¡¡new¡¡Button£¨¡¨Start¡¨£©£»¡¡¡¡
¡¡¡¡public¡¡void¡¡init£¨£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡add£¨t£©£»¡¡¡¡
¡¡¡¡¡¡¡¡start¡£addActionListener£¨new¡¡StartL£¨£©£©£»¡¡¡¡
¡¡¡¡¡¡¡¡add£¨start£©£»¡¡¡¡
¡¡¡¡¡¡¡¡onOff¡£addActionListener£¨new¡¡OnOffL£¨£©£©£»¡¡¡¡
¡¡¡¡¡¡¡¡add£¨onOff£©£»¡¡¡¡
¡¡¡¡£ý¡¡¡¡
¡¡¡¡class¡¡StartL¡¡implements¡¡ActionListener¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡public¡¡void¡¡actionPerformed£¨ActionEvent¡¡e£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡if£¨sp¡¡==¡¡null£©¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡sp¡¡=¡¡new¡¡SeparateSubTask£¨Counter2¡£this£©£»¡¡¡¡
¡¡¡¡¡¡¡¡£ý¡¡¡¡
¡¡¡¡£ý¡¡¡¡
¡¡¡¡class¡¡OnOffL¡¡implements¡¡ActionListener¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡public¡¡void¡¡actionPerformed£¨ActionEvent¡¡e£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡if£¨sp¡¡£¡=¡¡null£©¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡sp¡£invertFlag£¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡£ý¡¡¡¡
¡¡¡¡£ý¡¡¡¡
¡¡¡¡public¡¡static¡¡void¡¡main£¨String£§£§¡¡args£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡Counter2¡¡applet¡¡=¡¡new¡¡Counter2£¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡Frame¡¡aFrame¡¡=¡¡new¡¡Frame£¨¡¨Counter2¡¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡aFrame¡£addWindowListener£¨¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡new¡¡WindowAdapter£¨£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡public¡¡void¡¡windowClosing£¨WindowEvent¡¡e£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡System¡£exit£¨0£©£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£ý¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡£ý£©£»¡¡¡¡
¡¡¡¡¡¡¡¡aFrame¡£add£¨applet£»¡¡BorderLayout¡£CENTER£©£»¡¡¡¡
¡¡¡¡¡¡¡¡aFrame¡£setSize£¨300£»200£©£»¡¡¡¡
¡¡¡¡¡¡¡¡applet¡£init£¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡491¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡493¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
¡¡¡¡¡¡¡¡applet¡£start£¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡aFrame¡£setVisible£¨true£©£»¡¡¡¡
¡¡¡¡£ý¡¡¡¡
£ý¡¡///£º~¡¡¡¡
¡¡¡¡
ÏÖÔÚ£¬Counter2¡¡±ä³ÉÁËÒ»¸öÏ൱ֱ½ÓµÄ³ÌÐò£¬ËüµÄΨһÈÎÎñ¾ÍÊÇÉèÖò¢¹ÜÀíÓû§½çÃæ¡£µ«¼ÙÈôÓû§ÏÖÔÚ°´Ï¡¡
Start¡¡°´Å¥£¬È´²»»áÕæÕýµ÷ÓÃÒ»¸ö·½·¨¡£´Ëʱ²»ÊÇ´´½¨ÀàµÄÒ»¸öỊ̈߳¬¶øÊÇ´´½¨¡¡SeparateSubTask£¬È»ºó¼ÌÐø¡¡
Counter2¡¡Ê¼þÑ»·¡£×¢Òâ´Ëʱ»á±£´æ¡¡SeparateSubTask¡¡µÄ¾ä±ú£¬ÒÔ±ãÎÒÃÇ°´ÏÂonOff¡¡°´Å¥µÄʱºò£¬ÄÜÕý³£µØ¡¡
Çл»Î»ÓÚSeparateSubTask¡¡ÄÚ²¿µÄrunFlag¡¡£¨ÔËÐбêÖ¾£©¡£ËæºóÄǸöÏ̱߳ã¿ÉÆô¶¯£¨µ±Ëü¿´µ½±êÖ¾µÄʱ¡¡
ºò£©£¬È»ºó½«×Ô¼ºÖÐÖ¹£¨Òà¿É½«SeparateSubTask¡¡ÉèΪһ¸öÄÚ²¿ÀàÀ´´ïµ½ÕâһĿµÄ£©¡£¡¡¡¡
SeparateSubTask¡¡ÀàÊǶԡ¡Thread¡¡µÄÒ»¸ö¼òµ¥À©Õ¹£¬Ëü´øÓÐÒ»¸ö¹¹½¨Æ÷£¨ÆäÖб£´æÁË¡¡Counter2¡¡¾ä±ú£¬È»ºóͨ¡¡
¹ýµ÷Óá¡start£¨£©À´ÔËÐÐỊ̈߳©ÒÔ¼°Ò»¸ö¡¡run£¨£©¡ª¡ª±¾ÖÊÉÏ°üº¬ÁËCounter1¡£java¡¡µÄgo£¨£©ÄڵĴúÂë¡£ÓÉÓÚ¡¡
SeparateSubTask¡¡ÖªµÀ×Ô¼ºÈÝÄÉÁËÖ¸ÏòÒ»¸ö¡¡Counter2¡¡µÄ¾ä±ú£¬ËùÒÔÄܹ»ÔÚÐèÒªµÄʱºò½éÈ룬²¢·ÃÎÊ¡¡Counter2¡¡
µÄTestField¡¡£¨Îı¾×ֶΣ©¡£¡¡¡¡
°´ÏÂonOff¡¡°´Å¥£¬¼¸ºõÁ¢¼´Äܵõ½ÕýÈ·µÄÏìÓ¦¡£µ±È»£¬Õâ¸öÏìÓ¦Æäʵ²¢²»ÊÇ¡°Á¢¼´¡±·¢ÉúµÄ£¬Ëü±Ï¾¹ºÍÄÇÖÖ¡¡
ÓÉ¡°Öжϡ±Çý¶¯µÄϵͳ²»Í¬¡£Ö»ÓÐÏß³ÌÓµÓÐCPU¡¡µÄÖ´ÐÐʱ¼ä£¬²¢×¢Òâµ½±ê¼ÇÒÑ·¢Éú¸Ä±ä£¬¼ÆÊýÆ÷²Å»áÍ£Ö¹¡£¡¡¡¡
¡¡¡¡
1¡£¡¡ÓÃÄÚ²¿Àà¸ÄÉÆ´úÂë¡¡¡¡
ÏÂÃæ˵˵ÌâÍâ»°£¬Çë´ó¼Ò×¢Òâһϡ¡SeparateSubTask¡¡ºÍ¡¡Counter2¡¡ÀàÖ®¼ä·¢ÉúµÄ½áºÏÐÐΪ¡£SeparateSubTask¡¡
ͬCounter2¡¡¡°Ç×ÃÜ¡±µØ½áºÏµ½ÁËÒ»Æ𡪡ªËü±ØÐë³ÖÓÐÖ¸Ïò×Ô¼º¡°¸¸¡±Counter2¡¡¶ÔÏóµÄÒ»¸ö¾ä±ú£¬ÒÔ±ã×Ô¼ºÄÜ¡¡
»Øµ÷ºÍ²Ù×ÝËü¡£µ«Á½¸öÀಢ²»ÊÇÕæµÄºÏ²¢Îªµ¥¶ÀÒ»¸öÀࣨ¾¡¹ÜÔÚÏÂÒ»½ÚÖУ¬ÎÒÃǻὲµ½Java¡¡È·ÊµÌṩÁ˺ϲ¢¡¡
ËüÃǵķ½·¨£©£¬ÒòΪËüÃǸ÷×Ô×öµÄÊDz»Í¬µÄÊÂÇ飬¶øÇÒÊÇÔÚ²»Í¬µÄʱ¼ä´´½¨µÄ¡£µ«²»¹ÜÔõÑù£¬ËüÃÇÒÀÈ»½ôÃÜ¡¡
µØ½áºÏµ½Ò»Æ𣨸ü׼ȷµØ˵£¬Ó¦¸Ã½Ð¡°ÁªºÏ¡±£©£¬ËùÒÔʹ³ÌÐò´úÂë¶àÉÙÏÔµÃÓÐЩ±¿×¾¡£ÔÚÕâÖÖÇé¿öÏ£¬Ò»¸ö¡¡
ÄÚ²¿Àà¿ÉÒÔÏÔÖø¸ÄÉÆ´úÂëµÄ¡°¿É¶ÁÐÔ¡±ºÍÖ´ÐÐЧÂÊ£º¡¡¡¡
¡¡¡¡
//£º¡¡Counter2i¡£java¡¡¡¡
//¡¡Counter2¡¡using¡¡an¡¡inner¡¡class¡¡for¡¡the¡¡thread¡¡¡¡
import¡¡java¡£awt¡£*£»¡¡¡¡
import¡¡java¡£awt¡£event¡£*£»¡¡¡¡
import¡¡java¡£applet¡£*£»¡¡¡¡
¡¡¡¡
public¡¡class¡¡Counter2i¡¡extends¡¡Applet¡¡£û¡¡¡¡
¡¡¡¡private¡¡class¡¡SeparateSubTask¡¡extends¡¡Thread¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡int¡¡count¡¡=¡¡0£»¡¡¡¡
¡¡¡¡¡¡¡¡boolean¡¡runFlag¡¡=¡¡true£»¡¡¡¡
¡¡¡¡¡¡¡¡SeparateSubTask£¨£©¡¡£û¡¡start£¨£©£»¡¡£ý¡¡¡¡
¡¡¡¡¡¡¡¡public¡¡void¡¡run£¨£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡while¡¡£¨true£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡try¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡sleep£¨100£©£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡£ý¡¡catch¡¡£¨InterruptedException¡¡e£©£û£ý¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡if£¨runFlag£©¡¡¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡t¡£setText£¨Integer¡£toString£¨count£«£«£©£©£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡£ý¡¡¡¡
¡¡¡¡¡¡¡¡£ý¡¡¡¡
¡¡¡¡£ý¡¡¡¡¡¡
¡¡¡¡private¡¡SeparateSubTask¡¡sp¡¡=¡¡null£»¡¡¡¡
¡¡¡¡private¡¡TextField¡¡t¡¡=¡¡new¡¡TextField£¨10£©£»¡¡¡¡
¡¡¡¡private¡¡Button¡¡¡¡¡¡
¡¡¡¡¡¡¡¡onOff¡¡=¡¡new¡¡Button£¨¡¨Toggle¡¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡start¡¡=¡¡new¡¡Button£¨¡¨Start¡¨£©£»¡¡¡¡
¡¡¡¡public¡¡void¡¡init£¨£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡492¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡494¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
¡¡¡¡¡¡¡¡add£¨t£©£»¡¡¡¡
¡¡¡¡¡¡¡¡start¡£addActionListener£¨new¡¡StartL£¨£©£©£»¡¡¡¡
¡¡¡¡¡¡¡¡add£¨start£©£»¡¡¡¡
¡¡¡¡¡¡¡¡onOff¡£addActionListener£¨new¡¡OnOffL£¨£©£©£»¡¡¡¡
¡¡¡¡¡¡¡¡add£¨onOff£©£»¡¡¡¡
¡¡¡¡£ý¡¡¡¡
¡¡¡¡class¡¡StartL¡¡implements¡¡ActionListener¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡public¡¡void¡¡actionPerformed£¨ActionEvent¡¡e£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡if£¨sp¡¡==¡¡null£©¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡sp¡¡=¡¡new¡¡SeparateSubTask£¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡£ý¡¡¡¡
¡¡¡¡£ý¡¡¡¡
¡¡¡¡class¡¡OnOffL¡¡implements¡¡ActionListener¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡public¡¡vo¡¡id¡¡actionPerformed£¨ActionEvent¡¡e£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡if£¨sp¡¡£¡=¡¡null£©¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡sp¡£runFlag¡¡=¡¡£¡sp¡£runFlag£»¡¡//¡¡invertFlag£¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡£ý¡¡¡¡
¡¡¡¡£ý¡¡¡¡
¡¡¡¡public¡¡static¡¡void¡¡main£¨String£§£§¡¡args£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡Counter2i¡¡applet¡¡=¡¡new¡¡Counter2i£¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡Frame¡¡aFrame¡¡=¡¡new¡¡Frame£¨¡¨Counter2i¡¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡aFrame¡£addWindowListener£¨¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡new¡¡WindowAdapter£¨£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡public¡¡void¡¡windowClosing£¨WindowEvent¡¡e£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡System¡£exit£¨0£©£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£ý¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡£ý£©£»¡¡¡¡
¡¡¡¡¡¡¡¡aFrame¡£add£¨applet£»¡¡BorderLayout¡£CENTER£©£»¡¡¡¡
¡¡¡¡¡¡¡¡aFrame¡£setSize£¨300£»200£©£»¡¡¡¡
¡¡¡¡¡¡¡¡applet¡£init£¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡applet¡£start£¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡aFrame¡£setVisible£¨true£©£»¡¡¡¡
¡¡¡¡£ý¡¡¡¡
£ý¡¡///£º~¡¡¡¡
¡¡¡¡
Õâ¸öSeparateSubTask¡¡Ãû×Ö²»»áÓëÇ°ÀýÖеġ¡SeparateSubTask¡¡³åÍ»¡ª¡ª¼´Ê¹ËüÃǶ¼ÔÚÏàͬµÄĿ¼À¡ªÒòΪ¡¡
ËüÒÑ×÷Ϊһ¸öÄÚ²¿ÀàÒþ²ØÆðÀ´¡£´ó¼ÒÒà¿É¿´µ½ÄÚ²¿Àà±»ÉèΪprivate¡¡£¨Ë½ÓУ©ÊôÐÔ£¬ÕâÒâζ×ÅËüµÄ×ֶκͷ½¡¡
·¨¶¼¿É»ñµÃĬÈϵķÃÎÊȨÏÞ£¨run£¨£©³ýÍ⣬Ëü±ØÐëÉèΪ¡¡public£¬ÒòΪËüÔÚ»ù´¡ÀàÖÐÊǹ«¿ªµÄ£©¡£³ýCounter2i¡¡
Ö®Í⣬ÆäËûÈκη½Ã涼²»¿É·ÃÎÊprivate¡¡ÄÚ²¿Àà¡£¶øÇÒÓÉÓÚÁ½¸öÀà½ôÃܽáºÏÔÚÒ»Æð£¬ËùÒÔºÜÈÝÒ×·Å¿íËüÃÇÖ®¡¡
¼äµÄ·ÃÎÊÏÞÖÆ¡£ÔÚSeparateSubTask¡¡ÖУ¬ÎÒÃÇ¿É¿´µ½invertFlag£¨£©·½·¨Òѱ»É¾È¥£¬ÒòΪ¡¡Counter2i¡¡ÏÖÔÚ¿ÉÒÔ¡¡
Ö±½Ó·ÃÎÊrunFlag¡£¡¡¡¡
´ËÍ⣬עÒâ¡¡SeparateSubTask¡¡µÄ¹¹½¨Æ÷Òѵõ½Á˼ò»¯¡ª¡ªËüÏÖÔÚΨһµÄÓÃÍâ¾ÍÊÇÆô¶¯Ï̡߳£Counter2i¡¡¶ÔÏó¡¡
µÄ¾ä±úÈÔÏóÒÔÇ°ÄÇÑùµÃÒÔ²¶»ñ£¬µ«²»ÔÙÊÇͨ¹ýÈ˹¤´«µÝºÍÒýÓÃÍⲿ¶ÔÏóÀ´´ïµ½ÕâһĿµÄ£¬´ËʱµÄÄÚ²¿Àà»úÖÆ¡¡
¿ÉÒÔ×Ô¶¯ÕÕÁÏËü¡£ÔÚrun£¨£©ÖУ¬¿É¿´µ½¶Ôt¡¡µÄ·ÃÎÊÊÇÖ