°Ë±¦Êé¿â > ÎÄѧÆäËûµç×ÓÊé > Java±à³Ì˼ÏëµÚ4°æ[ÖÐÎÄ°æ](PDF¸ñʽ) >

µÚ130²¿·Ö

Java±à³Ì˼ÏëµÚ4°æ[ÖÐÎÄ°æ](PDF¸ñʽ)-µÚ130²¿·Ö

С˵£º Java±à³Ì˼ÏëµÚ4°æ[ÖÐÎÄ°æ](PDF¸ñʽ) ×ÖÊý£º ÿҳ4000×Ö

°´¼üÅÌÉÏ·½Ïò¼ü ¡û »ò ¡ú ¿É¿ìËÙÉÏÏ·­Ò³£¬°´¼üÅÌÉ쵀 Enter ¼ü¿É»Øµ½±¾ÊéĿ¼ҳ£¬°´¼üÅÌÉÏ·½Ïò¼ü ¡ü ¿É»Øµ½±¾Ò³¶¥²¿£¡
¡ª¡ª¡ª¡ªÎ´ÔĶÁÍꣿ¼ÓÈëÊéÇ©ÒѱãÏ´μÌÐøÔĶÁ£¡




¡¡¡¡¡¡¡¡aFrame¡£addWindowListener£¨¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡new¡¡WindowAdapter£¨£©¡¡£û¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡public¡¡void¡¡windowClosing£¨WindowEvent¡¡e£©£û¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡System¡£exit£¨0£©£»¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£ý¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡£ý£©£»¡¡¡¡

¡¡¡¡¡¡¡¡aFrame¡£add£¨applet£»¡¡BorderLayout¡£CENTER£©£»¡¡¡¡

¡¡¡¡¡¡¡¡aFrame¡£setSize£¨350£»¡¡applet¡£numCounters¡¡*100£©£»¡¡¡¡

¡¡¡¡¡¡¡¡applet¡£init£¨£©£»¡¡¡¡

¡¡¡¡¡¡¡¡applet¡£start£¨£©£»¡¡¡¡

¡¡¡¡¡¡¡¡aFrame¡£setVisible£¨true£©£»¡¡¡¡

¡¡¡¡£ý¡¡¡¡

£ý¡¡///£º~¡¡¡¡

¡¡¡¡

ºÍÍù³£Ò»Ñù£¬Ã¿¸ö¼ÆÊýÆ÷¶¼°üº¬ÁË×Ô¼ºµÄÏÔʾ×é¼þ£ºÁ½¸öÎı¾×Ö¶ÎÒÔ¼°Ò»¸ö±êÇ©¡£¸ù¾ÝËüÃǵijõʼֵ£¬¿ÉÖª¡¡

µÀ¼ÆÊýÊÇÏàͬµÄ¡£ÕâЩ×é¼þÔÚ¡¡TwoCounter¡¡¹¹½¨Æ÷¼ÓÈë¡¡Container¡£ÓÉÓÚÕâ¸öÏß³ÌÊÇͨ¹ýÓû§µÄÒ»¸ö¡°°´Ï°´¡¡

Å¥¡±²Ù×÷Æô¶¯µÄ£¬ËùÒÔ¡¡start£¨£©¿ÉÄܱ»¶à´Îµ÷Óᣵ«¶ÔÒ»¸öÏß³ÌÀ´Ëµ£¬¶Ô¡¡Thread¡£start£¨£©µÄ¶à´Îµ÷ÓÃÊÇ·Ç·¨¡¡

µÄ£¨»á²úÉúÎ¥Àý£©¡£ÔÚ¡¡started±ê¼ÇºÍ¹ýÔصġ¡start£¨£©·½·¨ÖУ¬´ó¼Ò¿É¿´µ½Õë¶ÔÕâÒ»Çé¿ö²ÉÈ¡µÄ·À·¶´ëÊ©¡£¡¡¡¡

ÔÚrun£¨£©ÖУ¬count1¡¡ºÍ¡¡count2¡¡µÄÔöÖµÓëÏÔʾ·½Ê½±íÃæÉÏËƺõÄܱ£³ÖËüÃÇÍêÈ«Ò»Ö¡£Ëæºó»áµ÷ÓÃsleep£¨£©£»Èô¡¡

ûÓÐÕâ¸öµ÷Ó㬳ÌÐò±ã»á³ö´í£¬ÒòΪÄÇ»áÔì³É¡¡CPU¡¡ÄÑÓÚ½»»»ÈÎÎñ¡£¡¡¡¡

synchTest£¨£©·½·¨²ÉÈ¡µÄËƺõÊÇûÓÐÒâÒåµÄÐж¯£¬Ëü¼ì²é¡¡count1¡¡ÊÇ·ñµÈÓÚcount2£»Èç¹û²»µÈ£¬¾Í°Ñ±êÇ©ÉèΪ¡¡

¡¡¡°Unsynched¡±£¨²»Í¬²½£©¡£µ«ÊÇÊ×ÏÈ£¬Ëüµ÷ÓõÄÊÇÀàSharing1¡¡µÄÒ»¸ö¾²Ì¬³ÉÔ±£¬ÒÔ±ãÔöÖµºÍÏÔʾһ¸ö·ÃÎÊ¡¡

¼ÆÊýÆ÷£¬Ö¸³öÕâÖÖ¼ì²éÒѳɹ¦½øÐÐÁ˶àÉٴΣ¨ÕâÑù×öµÄÀíÓÉ»áÔÚ±¾ÀýµÄÆäËû°æ±¾ÖбäµÃ·Ç³£Ã÷ÏÔ£©¡£¡¡¡¡

Watcher¡¡ÀàÊÇÒ»¸öỊ̈߳¬ËüµÄ×÷ÓÃÊÇΪ´¦Óڻ״̬µÄËùÓС¡TwoCounter¡¡¶ÔÏ󶼵÷Óá¡synchTest£¨£©¡£Æä¼ä£¬Ëü¡¡

»á¶ÔSharing1¡¡¶ÔÏóÖÐÈÝÄɵÄÊý×é½øÐбéÀú¡£¿É½«¡¡Watcher¡¡ÏëÏó³ÉËüÂÓ¹ý¡¡TwoCounter¡¡¶ÔÏóµÄ¼ç°ò²»¶ÏµØ¡°Íµ¡¡

¿´¡±¡£¡¡¡¡

Sharing1¡¡°üº¬ÁË¡¡TwoCounter¡¡¶ÔÏóµÄÒ»¸öÊý×飬Ëüͨ¹ý¡¡init£¨£©½øÐгõʼ»¯£¬²¢ÔÚÎÒÃÇ°´Ï¡°start¡±°´Å¥ºó×÷¡¡

ΪÏß³ÌÆô¶¯¡£ÒÔºóÈô°´Ï¡°Observe¡±£¨¹Û²ì£©°´Å¥£¬¾Í»á´´½¨Ò»¸ö»òÕ߶à¸ö¹Û²ìÆ÷£¬²¢¶ÔºÁ²»Éè·ÀµÄ¡¡

TwoCounter¡¡½øÐе÷²é¡£¡¡¡¡

×¢ÒâΪÁËÈÃËü×÷Ϊһ¸ö³ÌÐòƬÔÚä¯ÀÀÆ÷ÖÐÔËÐУ¬Web¡¡Ò³ÐèÒª°üº¬ÏÂÃæÕ⼸ÐУº¡¡¡¡

¡¡¡¡

¡¡¡¡

¡¡¡¡

¡¡¡¡

¡¡¡¡

¡¡¡¡

¿É×ÔÐиıä¿í¶È¡¢¸ß¶ÈÒÔ¼°²ÎÊý£¬¸ù¾Ý×Ô¼ºµÄÒâÔ¸½øÐÐÊÔÑé¡£Èô¸Ä±äÁËsize¡¡ºÍ¡¡observers£¬³ÌÐòµÄÐÐΪҲ»á¡¡

·¢Éú±ä»¯¡£ÎÒÃÇÒ²×¢Òâµ½£¬Í¨¹ý´ÓÃüÁîÐнÓÊܲÎÊý£¨»òÕßʹÓÃĬÈÏÖµ£©£¬Ëü±»Éè¼Æ³É×÷Ϊһ¸ö¶ÀÁ¢µÄÓ¦Óó̡¡

ÐòÔËÐС£¡¡¡¡

ÏÂÃæ²ÅÊÇ×îÈÃÈË¡°²»¿É˼Ò顱µÄ¡£ÔÚTwoCounter¡£run£¨£©ÖУ¬ÎÞÏÞÑ­»·Ö»ÊDz»¶ÏµØÖظ´ÏàÁÚµÄÐУº¡¡¡¡

t1¡£setText£¨Integer¡£toString£¨count1£«£«£©£©£»¡¡¡¡

t2¡£setText£¨Integer¡£toString£¨count2£«£«£©£©£»¡¡¡¡

¡¡£¨ºÍ¡°Ë¯Ãß¡±Ò»Ñù£¬²»¹ýÔÚÕâÀï²¢²»ÖØÒª£©¡£µ«ÔÚ³ÌÐòÔËÐеÄʱºò£¬Äã»á·¢ÏÖcount1ºÍ¡¡count2¡¡±»¡°¹Û²ì¡±¡¡

¡¡£¨ÓÃWatcher¡¡¹Û²ì£©µÄ´ÎÊýÊDz»ÏàµÈµÄ£¡ÕâÊÇÓÉÏ̵߳ı¾ÖÊÔì³ÉµÄ¡ª¡ªËüÃÇ¿ÉÔÚÈκÎʱºò¹ÒÆð£¨ÔÝÍ££©¡£Ëù¡¡

ÒÔÔÚÉÏÊöÁ½ÐеÄÖ´ÐÐʱ¿ÌÖ®¼ä£¬ÓÐʱ»á³öÏÖÖ´ÐÐÔÝÍ£ÏÖÏó¡£Í¬Ê±£¬Watcher¡¡Ïß³ÌÒ²ÕýºÃ¸úËæ׎øÀ´£¬²¢ÕýºÃ¡¡

ÔÚÕâ¸öʱºò½øÐбȽϣ¬Ôì³É¼ÆÊýÆ÷³öÏÖ²»ÏàµÈµÄÇé¿ö¡£¡¡¡¡

±¾Àý½ÒʾÁËʹÓÃÏß³Ìʱһ¸ö·Ç³£»ù±¾µÄÎÊÌâ¡£ÎÒÃǸúÎÞ´ÓÖªµÀÒ»¸öÏß³ÌʲôʱºòÔËÐС£ÏëÏó×Ô¼º×øÔÚÒ»ÕÅ×À¡¡

×ÓÇ°Ã棬×ÀÉÏ·ÅÓÐÒ»°Ñ²æ×Ó£¬×¼±¸²æÆð×Ô¼ºµÄ×îºóÒ»¿éʳÎï¡£µ±²æ×ÓÒªÅöµ½Ê³Îïʱ£¬Ê³ÎïȴͻȻÏûʧÁË£¨Òò¡¡

ΪÕâ¸öÏß³ÌÒѱ»¹ÒÆð£¬Í¬Ê±ÁíÒ»¸öÏ߳̽øÀ´¡°Íµ¡±×ßÁËʳÎ¡£Õâ±ãÊÇÎÒÃÇÒª½â¾öµÄÎÊÌâ¡£¡¡¡¡

ÓеÄʱºò£¬ÎÒÃDz¢²»½éÒâÒ»¸ö×ÊÔ´ÔÚ³¢ÊÔʹÓÃËüµÄʱºòÊÇ·ñÕý±»·ÃÎÊ£¨Ê³ÎïÔÚÁíһЩÅÌ×ÓÀ¡£µ«ÎªÁËÈöࡡ



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡502¡¡


¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­Page¡¡504¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­

Ï̻߳úÖÆÄܹ»Õý³£ÔËת£¬ÐèÒª²ÉȡһЩ´ëÊ©À´·ÀÖ¹Á½¸öÏ̷߳ÃÎÊÏàͬµÄ×ÊÔ´¡ª¡ªÖÁÉÙÔڹؼüµÄʱÆÚ¡£¡¡¡¡

Ϊ·ÀÖ¹³öÏÖÕâÑùµÄ³åÍ»£¬Ö»ÐèÔÚÏß³ÌʹÓÃÒ»¸ö×ÊԴʱΪÆä¼ÓËø¼´¿É¡£·ÃÎÊ×ÊÔ´µÄµÚÒ»¸öÏ̻߳áÆä¼ÓÉÏËøÒÔ¡¡

ºó£¬ÆäËûÏ̱߳㲻ÄÜÔÙʹÓÃÄǸö×ÊÔ´£¬³ý·Ç±»½âËø¡£Èç¹û³µ×ÓµÄÇ°×ùÊÇÓÐÏÞµÄ×ÊÔ´£¬¸ßº°¡°ÕâÊÇÎҵģ¡¡±µÄ¡¡

º¢×Ó»áÖ÷ÕÅ°ÑËüËøÆðÀ´¡£¡¡¡¡



14¡£2¡£2¡¡Java¡¡ÈçºÎ¹²Ïí×ÊÔ´¡¡¡¡



¶ÔÒ»ÖÖÌØÊâµÄ×ÊÔ´¡ª¡ª¶ÔÏóÖеÄÄڴ桪¡ªJava¡¡ÌṩÁËÄÚ½¨µÄ»úÖÆÀ´·ÀÖ¹ËüÃǵijåÍ»¡£ÓÉÓÚÎÒÃÇͨ³£½«Êý¾ÝÔª¡¡

ËØÉèΪ´ÓÊôÓÚprivate¡¡£¨Ë½ÓУ©À࣬Ȼºóֻͨ¹ý·½·¨·ÃÎÊÄÇЩÄڴ棬ËùÒÔÖ»Ð轫һ¸öÌض¨µÄ·½·¨ÉèΪ¡¡

synchronized¡¡£¨Í¬²½µÄ£©£¬±ã¿ÉÓÐЧµØ·ÀÖ¹³åÍ»¡£ÔÚÈκÎʱ¿Ì£¬Ö»¿ÉÓÐÒ»¸öÏ̵߳÷ÓÃÌض¨¶ÔÏóµÄÒ»¸ö¡¡

synchronized·½·¨£¨¾¡¹ÜÄǸöÏ߳̿ÉÒÔµ÷Óöà¸ö¶ÔÏóµÄͬ²½·½·¨£©¡£ÏÂÃæÁгö¼òµ¥µÄsynchronized¡¡·½·¨£º¡¡¡¡

synchronized¡¡void¡¡f£¨£©¡¡£û¡¡/*¡¡¡£¡£¡£¡¡*/¡¡£ý¡¡¡¡

synchronized¡¡void¡¡g£¨£©¡¡£û¡¡/*¡¡¡£¡£¡£¡¡*/¡¡£ý¡¡¡¡

ÿ¸ö¶ÔÏ󶼰üº¬ÁËÒ»°ÑËø£¨Ò²½Ð×÷¡°¼àÊÓÆ÷¡±£©£¬Ëü×Ô¶¯³ÉΪ¶ÔÏóµÄÒ»²¿·Ö£¨²»±ØΪ´ËдÈκÎÌØÊâµÄ´ú¡¡

Â룩¡£µ÷ÓÃÈκΡ¡synchronized·½·¨Ê±£¬¶ÔÏó¾Í»á±»Ëø¶¨£¬²»¿ÉÔÙµ÷ÓÃÄǸö¶ÔÏóµÄÆäËûÈκÎsynchronized¡¡·½¡¡

·¨£¬³ý·ÇµÚÒ»¸ö·½·¨Íê³ÉÁË×Ô¼ºµÄ¹¤×÷£¬²¢½â³ýËø¶¨¡£ÔÚÉÏÃæµÄÀý×ÓÖУ¬Èç¹ûΪһ¸ö¶ÔÏóµ÷ÓÃf£¨£©£¬±ã²»ÄÜ¡¡

ÔÙΪͬÑùµÄ¶ÔÏóµ÷ÓÃg£¨£©£¬³ý·Ç¡¡f£¨£©Íê³É²¢½â³ýËø¶¨¡£Òò´Ë£¬Ò»¸öÌض¨¶ÔÏóµÄËùÓС¡synchronized·½·¨¶¼¹²Ïí¡¡

×ÅÒ»°ÑËø£¬¶øÇÒÕâ°ÑËøÄÜ·ÀÖ¹¶à¸ö·½·¨¶ÔͨÓÃÄÚ´æͬʱ½øÐÐд²Ù×÷£¨±ÈÈçͬʱÓжà¸öỊ̈߳©¡£¡¡¡¡

ÿ¸öÀàÒ²ÓÐ×Ô¼ºµÄÒ»°ÑËø£¨×÷ΪÀàµÄClass¡¡¶ÔÏóµÄÒ»²¿·Ö£©£¬ËùÒÔsynchronized¡¡static¡¡·½·¨¿ÉÔÚÒ»¸öÀàµÄ¡¡

·¶Î§ÄÚ±»Ï໥¼äËø¶¨ÆðÀ´£¬·ÀÖ¹Óë¡¡staticÊý¾ÝµÄ½Ó´¥¡£¡¡¡¡

×¢ÒâÈç¹ûÏë±£»¤ÆäËûijЩ×ÊÔ´²»±»¶à¸öÏß³Ìͬʱ·ÃÎÊ£¬¿ÉÒÔÇ¿ÖÆͨ¹ý¡¡synchronized¡¡·½·ÃÎÊÄÇЩ×ÊÔ´¡£¡¡¡¡

¡¡¡¡

1¡£¡¡¼ÆÊýÆ÷µÄͬ²½¡¡¡¡

×°±¸ÁËÕâ¸öйؼü×Öºó£¬ÎÒÃÇÄܹ»²ÉÈ¡µÄ·½°¸¾Í¸üÁé»îÁË£º¿ÉÒÔֻΪ¡¡TwoCounter¡¡Öеķ½·¨¼òµ¥µØʹÓá¡

synchronized¹Ø¼ü×Ö¡£ÏÂÃæÕâ¸öÀý×ÓÊǶÔÇ°ÀýµÄ¸Ä°æ£¬ÆäÖмÓÈëÁËеĹؼü×Ö£º¡¡¡¡

¡¡¡¡

//£º¡¡Sharing2¡£java¡¡¡¡

//¡¡Using¡¡the¡¡synchronized¡¡keyword¡¡to¡¡prevent¡¡¡¡

//¡¡multiple¡¡access¡¡to¡¡a¡¡particular¡¡resource¡£¡¡¡¡

import¡¡java¡£awt¡£*£»¡¡¡¡

import¡¡java¡£awt¡£event¡£*£»¡¡¡¡

import¡¡java¡£applet¡£*£»¡¡¡¡

¡¡¡¡

class¡¡TwoCounter2¡¡extends¡¡Thread¡¡£û¡¡¡¡

¡¡¡¡private¡¡boolean¡¡started¡¡=¡¡false£»¡¡¡¡

¡¡¡¡private¡¡TextField¡¡¡¡¡¡

¡¡¡¡¡¡¡¡t1¡¡=¡¡new¡¡TextField£¨5£©£»¡¡¡¡

¡¡¡¡¡¡¡¡t2¡¡=¡¡new¡¡TextField£¨5£©£»¡¡¡¡

¡¡¡¡private¡¡Label¡¡l¡¡=¡¡¡¡¡¡

¡¡¡¡¡¡¡¡new¡¡Label£¨¡¨count1¡¡==¡¡count2¡¨£©£»¡¡¡¡

¡¡¡¡private¡¡int¡¡count1¡¡=¡¡0£»¡¡count2¡¡=¡¡0£»¡¡¡¡

¡¡¡¡public¡¡TwoCounter2£¨Container¡¡c£©¡¡£û¡¡¡¡

¡¡¡¡¡¡¡¡Panel¡¡p¡¡=¡¡new¡¡Panel£¨£©£»¡¡¡¡

¡¡¡¡¡¡¡¡p¡£add£¨t1£©£»¡¡¡¡

¡¡¡¡¡¡¡¡p¡£add£¨t2£©£»¡¡¡¡

¡¡¡¡¡¡¡¡p¡£add£¨l£©£»¡¡¡¡

¡¡¡¡¡¡¡¡c¡£add£¨p£©£»¡¡¡¡

¡¡¡¡£ý¡¡¡¡¡¡¡¡¡¡¡¡

¡¡¡¡public¡¡void¡¡start£¨£©¡¡£û¡¡¡¡

¡¡¡¡¡¡¡¡if£¨£¡started£©¡¡£û¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡started¡¡=¡¡true£»¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡super¡£start£¨£©£»¡¡¡¡

¡¡¡¡¡¡¡¡£ý¡¡¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡503¡¡


¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­Page¡¡505¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­

¡¡¡¡£ý¡¡¡¡

¡¡¡¡public¡¡synchronized¡¡void¡¡run£¨£©¡¡£û¡¡¡¡

¡¡¡¡¡¡¡¡while¡¡£¨true£©¡¡£û¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡t1¡£setText£¨Integer¡£toString£¨count1£«£«£©£©£»¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡t2¡£setText£¨Integer¡£toString£¨count2£«£«£©£©£»¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡try¡¡£û¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡sleep£¨500£©£»¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡£ý¡¡catch¡¡£¨InterruptedException¡¡e£©£û£ý¡¡¡¡

¡¡¡¡¡¡¡¡£ý¡¡¡¡

¡¡¡¡£ý¡¡¡¡

¡¡¡¡public¡¡synchronized¡¡void¡¡synchTest£¨£©¡¡£û¡¡¡¡

¡¡¡¡¡¡¡¡Sharing2¡£incrementAccess£¨£©£»¡¡¡¡

¡¡¡¡¡¡¡¡if£¨count1¡¡£¡=¡¡count2£©¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡l¡£setText£¨¡¨Unsynched¡¨£©£»¡¡¡¡

¡¡¡¡£ý¡¡¡¡

£ý¡¡¡¡

¡¡¡¡

class¡¡Watcher2¡¡extends¡¡Thread¡¡£û¡¡¡¡

¡¡¡¡private¡¡Sharing2¡¡p£»¡¡¡¡

¡¡¡¡public¡¡Watcher2£¨Sharing2¡¡p£©¡¡£û¡¡¡¡¡¡

¡¡¡¡¡¡¡¡this¡£p¡¡=¡¡p£»¡¡¡¡

¡¡¡¡¡¡¡¡start£¨£©£»¡¡¡¡

¡¡¡¡£ý¡¡¡¡

¡¡¡¡public¡¡void¡¡run£¨£©¡¡£û¡¡¡¡

¡¡¡¡¡¡¡¡while£¨true£©¡¡£û¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡for£¨int¡¡i¡¡=¡¡0£»¡¡i¡¡¡¶¡¡p¡£s¡£length£»¡¡i£«£«£©¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡p¡£s£§i£§¡£synchTest£¨£©£»¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡try¡¡£û¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡sleep£¨500£©£»¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡£ý¡¡catch¡¡£¨InterruptedException¡¡e£©£û£ý¡¡¡¡

¡¡¡¡¡¡¡¡£ý¡¡¡¡

¡¡¡¡£ý¡¡¡¡

£ý¡¡¡¡

¡¡¡¡

public¡¡class¡¡Sharing2¡¡extends¡¡Applet¡¡£û¡¡¡¡

¡¡¡¡TwoCounter2£§£§¡¡s£»¡¡¡¡

¡¡¡¡private¡¡static¡¡int¡¡accessCount¡¡=¡¡0£»¡¡¡¡

¡¡¡¡private¡¡static¡¡TextField¡¡aCount¡¡=¡¡¡¡¡¡

¡¡¡¡¡¡¡¡new¡¡TextField£¨¡¨0¡¨£»¡¡10£©£»¡¡¡¡

¡¡¡¡public¡¡static¡¡void¡¡incrementAccess£¨£©¡¡£û¡¡¡¡

¡¡¡¡¡¡¡¡accessCount£«£«£»¡¡¡¡

¡¡¡¡¡¡¡¡aCount¡£setText£¨Integer¡£toString£¨accessCount£©£©£»¡¡¡¡

¡¡¡¡£ý¡¡¡¡

¡¡¡¡private¡¡Button¡¡¡¡¡¡

¡¡¡¡¡¡¡¡start¡¡=¡¡new¡¡Button£¨¡¨Start¡¨£©£»¡¡¡¡

¡¡¡¡¡¡¡¡observer¡¡=¡¡new¡¡Button£¨¡¨Observe¡¨£©£»¡¡¡¡

¡¡¡¡private¡¡boolean¡¡isApplet¡¡=¡¡true£»¡¡¡¡

¡¡¡¡private¡¡int¡¡numCounters¡¡=¡¡0£»¡¡¡¡

¡¡¡¡private¡¡int¡¡numObservers¡¡=¡¡0£»¡¡¡¡

¡¡¡¡public¡¡void¡¡init£¨£©¡¡£û¡¡¡¡

¡¡¡¡¡¡¡¡if£¨isApplet£©¡¡£û¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡numCounters¡¡=¡¡¡¡¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡504¡¡


¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­Page¡¡506¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Integer¡£parseInt£¨getParameter£¨¡¨size¡¨£©£©£»¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡numObservers¡¡=¡¡¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Integer¡£parseInt£¨¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡getParameter£¨¡¨observers¡¨£©£©£»¡¡¡¡

¡¡¡¡¡¡¡¡£ý¡¡¡¡

¡¡¡¡¡¡¡¡s¡¡=¡¡new¡¡TwoCounter2£§numCounters£§£»¡¡¡¡

¡¡¡¡¡¡¡¡for£¨int¡¡i¡¡=¡¡0£»¡¡i¡¡¡¶¡¡s¡£length£»¡¡i£«£«£©¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡s£§i£§¡¡=¡¡new¡¡TwoCounter2£¨this£©£»¡¡¡¡

¡¡¡¡¡¡¡¡Panel¡¡p¡¡=¡¡new¡¡Panel£¨£©£»¡¡¡¡

¡¡¡¡¡¡¡¡start¡£addActionListener£¨new¡¡StartL£¨£©£©£»¡¡¡¡

¡¡¡¡¡¡¡¡p¡£add£¨start£©£»¡¡¡¡

¡¡¡¡¡¡¡¡observer¡£addActionListener£¨new¡¡ObserverL£¨£©£©£»¡¡¡¡

¡¡¡¡¡¡¡¡p¡£add£¨observer£©£»¡¡¡¡

¡¡¡¡¡¡¡¡p¡£add£¨new¡¡Label£¨¡¨Access¡¡Count¡¨£©£©£»¡¡¡¡

¡¡¡¡¡¡¡¡p¡£add£¨aCount£©£»¡¡¡¡

¡¡¡¡¡¡¡¡add£¨p£©£»¡¡¡¡

¡¡¡¡£ý¡¡¡¡

¡¡¡¡class¡¡StartL¡¡implements¡¡ActionListener¡¡£û¡¡¡¡

¡¡¡¡¡¡¡¡public¡¡void¡¡actionPerformed£¨ActionEvent¡¡e£©¡¡£û¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡for£¨int¡¡i¡¡=¡¡0£»¡¡i¡¡¡¶¡¡s¡£length£»¡¡i£«£«£©¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡s£§i£§¡£start£¨£©£»¡¡¡¡

¡¡¡¡¡¡¡¡£ý¡¡¡¡

¡¡¡¡£ý¡¡¡¡

¡¡¡¡class¡¡ObserverL¡¡implements¡¡ActionListener¡¡£û¡¡¡¡

¡¡¡¡¡¡¡¡public¡¡void¡¡actionPerformed£¨ActionEvent¡¡e£©¡¡£û¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡for£¨int¡¡i¡¡=¡¡0£»¡¡i¡¡¡¶¡¡numObservers£»¡¡i£«£«£©¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡new¡¡Watcher2£¨Sharing2¡£this£©£»¡¡¡¡

¡¡¡¡¡¡¡¡£ý¡¡¡¡

¡¡¡¡£ý¡¡¡¡

¡¡¡¡public¡¡static¡¡void¡¡main£¨String£§£§¡¡args£©¡¡£û¡¡¡¡

¡¡¡¡¡¡¡¡Sharing2¡¡applet¡¡=¡¡new¡¡Sharing2£¨£©£»¡¡¡¡

¡¡¡¡¡¡¡¡//¡¡This¡¡isn't¡¡an¡¡applet£»¡¡so¡¡set¡¡the¡¡flag¡¡and¡¡¡¡

¡¡¡¡¡¡¡¡//¡¡produce¡¡the¡¡parameter¡¡values¡¡from¡¡args£º¡¡¡¡

¡¡¡¡¡¡¡¡applet¡£isApplet¡¡=¡¡false£»¡¡¡¡

¡¡¡¡¡¡¡¡applet¡£numCounters¡¡=¡¡¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡£¨args¡£length¡¡==¡¡0¡¡£¿¡¡5¡¡£º¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Integer¡£parseInt£¨args£§0£§£©£©£»¡¡¡¡

¡¡¡¡¡¡¡¡applet¡£numObservers¡¡=¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡£¨args¡£length¡¡¡¶¡¡2¡¡£¿¡¡5¡¡£º¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Integer¡£parseInt£¨args£§1£§£©£©£»¡¡¡¡

¡¡¡¡¡¡¡¡Frame¡¡aFrame¡¡=¡¡new¡¡Frame£¨¡¨Sharing2¡¨£©£»¡¡¡¡

¡¡¡¡¡¡¡¡aFrame¡£addWindowListener£¨¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡new¡¡WindowAdapter£¨£©¡¡£û¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡public¡¡void¡¡windowClosing£¨WindowEvent¡¡e£©£û¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡System¡£exit£¨0£©£»¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£ý¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡£ý£©£»¡¡¡¡

¡¡¡¡¡¡¡¡aFrame¡£add£¨applet£»¡¡BorderLayout¡£CENTER£©£»¡¡¡¡

¡¡¡¡¡¡¡¡aFrame¡£setSize£¨350£»¡¡applet¡£numCounters¡¡*100£©£»¡¡¡¡

¡¡¡¡¡¡¡¡applet¡£in¡¡it£¨£©£»¡¡¡¡

¡¡¡¡¡¡¡¡applet¡£start£¨£©£»¡¡¡¡

¡¡¡¡¡¡¡¡aFrame¡£setVisible£¨true£©£»¡¡¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡505¡¡


¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­Page¡¡507¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­

¡¡¡¡£ý¡¡¡¡

£ý¡¡///£º~¡¡¡¡

¡¡¡¡

ÎÒÃÇ×¢Òâµ½ÎÞÂÛrun£¨£©»¹ÊÇ¡¡synchTest£¨£©¶¼ÊÇ¡°Í¬²½µÄ¡±¡£Èç¹ûֻͬ²½ÆäÖеÄÒ»¸ö·½·¨£¬ÄÇôÁíÒ»¸ö¾Í¿ÉÒÔ×Ô¡¡

ÓɺöÊÓ¶ÔÏóµÄËø¶¨£¬²¢¿ÉÎÞ°­µØµ÷Óá£ËùÒÔ±ØÐë¼Çסһ¸öÖØÒªµÄ¹æÔò£º¶ÔÓÚ·ÃÎÊij¸ö¹Ø¼ü¹²Ïí×ÊÔ´µÄËùÓз½¡¡

·¨£¬¶¼±ØÐë°ÑËüÃÇÉèΪ¡¡synchronized£¬·ñÔò¾Í²»ÄÜÕý³£µØ¹¤×÷¡£¡¡¡¡

ÏÖÔÚÓÖÓöµ½ÁËÒ»¸öÐÂÎÊÌâ¡£Watcher2¡¡ÓÀÔ¶¶¼²»ÄÜ¿´µ½ÕýÔÚ½øÐеÄÊÂÇ飬ÒòΪÕû¸örun£¨£©·½·¨ÒÑÉèΪ¡°Í¬¡¡

²½¡±¡£¶øÇÒÓÉÓڿ϶¨ÒªÎªÃ¿¸ö¶ÔÏóÔËÐÐrun£¨£©£¬ËùÒÔËøÓÀÔ¶²»ÄÜ´ò¿ª£¬¶øsynchTest£¨£©ÓÀÔ¶²»»áµÃµ½µ÷Óá£Ö®¡¡

ËùÒÔÄÜ¿´µ½ÕâÒ»½á¹û£¬ÊÇÒòΪaccessCount¡¡¸ù±¾Ã»Óб仯¡£¡¡¡¡

Ϊ½â¾öÕâ¸öÎÊÌ⣬ÎÒÃÇÄܲÉÈ¡µÄÒ»¸ö°ì·¨ÊÇÖ»½«run£¨£©ÖеÄÒ»²¿·Ö´úÂë¸ôÀë³öÀ´¡£ÏëÓÃÕâ¸ö°ì·¨¸ôÀë³öÀ´µÄ¡¡

ÄDz¿·Ö´úÂë½Ð×÷¡°¹Ø¼üÇøÓò¡±£¬¶øÇÒÒªÓò»Í¬µÄ·½Ê½À´Ê¹Óá¡synchronized¹Ø¼ü×Ö£¬ÒÔÉèÖÃÒ»¸ö¹Ø¼üÇøÓò¡£¡¡

Java¡¡Í¨¹ý¡°Í¬²½¿é¡±Ìṩ¶Ô¹Ø¼üÇøÓòµÄÖ§³Ö£»ÕâÒ»´Î£¬ÎÒÃÇÓá¡synchronized¹Ø¼ü×ÖÖ

·µ»ØĿ¼ ÉÏÒ»Ò³ ÏÂÒ»Ò³ »Øµ½¶¥²¿ ÔÞ£¨0£© ²È£¨1£©

Äã¿ÉÄÜϲ»¶µÄ