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

µÚ131²¿·Ö

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

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

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




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

Öзâ±ÕµÄ´úÂë½øÐÐͬ²½¡£ÈçÏÂËùʾ£º¡¡¡¡

synchronized£¨syncObject£©¡¡£û¡¡¡¡

¡¡¡¡//¡¡This¡¡code¡¡can¡¡be¡¡accessed¡¡by¡¡on¡¡ly¡¡¡¡

¡¡¡¡//¡¡one¡¡thread¡¡at¡¡a¡¡time£»¡¡assuming¡¡all¡¡¡¡

¡¡¡¡//¡¡threads¡¡respect¡¡syncObject's¡¡lock¡¡¡¡

£ý¡¡¡¡

¡¡¡¡

ÔÚÄܽøÈëͬ²½¿é֮ǰ£¬±ØÐëÔÚ¡¡synchObject¡¡ÉÏÈ¡µÃËø¡£Èç¹ûÒÑÓÐÆäËûÏß³ÌÈ¡µÃÁËÕâ°ÑËø£¬¿é±ã²»ÄܽøÈ룬±Ø¡¡

ÐëµÈºòÄÇ°ÑËø±»ÊÍ·Å¡£¡¡¡¡

¿É´ÓÕû¸örun£¨£©ÖÐɾ³ý¡¡synchronized¹Ø¼ü×Ö£¬»»³ÉÓÃÒ»¸öͬ²½¿é°üΧÁ½¸ö¹Ø¼üÐУ¬´Ó¶øÍê³É¶Ô¡¡Sharing2¡¡Àý¡¡

×ÓµÄÐ޸ġ£µ«Ê²Ã´¶ÔÏóÓ¦×÷ΪËøÀ´Ê¹ÓÃÄØ£¿ÄǸö¶ÔÏóÒÑÓÉ¡¡synchTest£¨£©±ê¼Ç³öÀ´ÁË¡ª¡ªÒ²¾ÍÊǵ±Ç°¶ÔÏó¡¡

¡¡£¨this£©£¡ËùÒÔÐ޸ĹýµÄrun£¨£©·½·¨ÏóÏÂÃæÕâ¸öÑù×Ó£º¡¡¡¡

¡¡¡¡

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

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

¡¡¡¡¡¡¡¡¡¡¡¡synchronized£¨this£©¡¡£û¡¡¡¡

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

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

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

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

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

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

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

¡¡¡¡£ý¡¡¡¡

¡¡¡¡

ÕâÊDZØÐë¶Ô¡¡Sharing2¡£java¡¡×÷³öµÄΨһÐ޸ģ¬ÎÒÃǻῴµ½¾¡¹ÜÁ½¸ö¼ÆÊýÆ÷ÓÀÔ¶²»»áÍÑÀëͬ²½£¨È¡¾öÓÚÔÊÐí¡¡

Watcher¡¡Ê²Ã´Ê±ºò¼ì²éËüÃÇ£©£¬µ«ÔÚrun£¨£©Ö´ÐÐÆڼ䣬ÈÔÈ»Ïò¡¡Watcher¡¡ÌṩÁË×ã¹»µÄ·ÃÎÊȨÏÞ¡£¡¡¡¡

µ±È»£¬ËùÓÐͬ²½¶¼È¡¾öÓÚ³ÌÐòÔ±ÊÇ·ñÇÚ·Ü£ºÒª·ÃÎʹ²Ïí×ÊÔ´µÄÿһ²¿·Ö´úÂ붼±ØÐë·â×°µ½Ò»¸öÊʵ±µÄͬ²½¿é¡¡

Àï¡£¡¡¡¡

¡¡¡¡

2¡£¡¡Í¬²½µÄЧÂÊ¡¡¡¡

ÓÉÓÚҪΪͬÑùµÄÊý¾Ý±àдÁ½¸ö·½·¨£¬ËùÒÔÎÞÂÛÈçºÎ¶¼²»»á¸øÈËÁôÏÂЧÂʺܸߵÄÓ¡Ï󡣿´À´Ëƺõ¸üºÃµÄÒ»ÖÖ×ö¡¡

·¨Êǽ«ËùÓз½·¨¶¼ÉèΪ×Ô¶¯Í¬²½£¬²¢ÍêÈ«Ïû³ý¡¡synchronized¹Ø¼ü×Ö£¨µ±È»£¬º¬ÓÐsynchronized¡¡run£¨£©µÄÀý¡¡

×ÓÏÔʾ³öÕâÑù×öÊǺܲ»Í¨µÄ£©¡£µ«ËüÒ²½Òʾ³ö»ñÈ¡Ò»°ÑËø²¢·ÇÒ»ÖÖ¡°Á®¼Û¡±·½°¸¡ª¡ªÎªÒ»´Î·½·¨µ÷Óø¶³öµÄ¡¡

´ú¼Û£¨½øÈëºÍÍ˳ö·½·¨£¬²»Ö´Ðз½·¨Ö÷Ì壩ÖÁÉÙÒªÀÛ¼Óµ½Ëı¶£¬¶øÇÒ¸ù¾ÝÎÒÃǵľßÌåÏÖ·½°¸£¬ÕâÒ»´ú¼Û»¹ÓС¡

¿ÉÄܱäµÃ¸ü¸ß¡£ËùÒÔ¼ÙÈçÒÑÖªÒ»¸ö·½·¨²»»áÔì³É³åÍ»£¬×îÃ÷ÖǵÄ×ö·¨±ãÊdz·ÏûÆäÖеġ¡synchronized¹Ø¼ü×Ö¡£¡¡¡¡



14¡£2¡£3¡¡¡¡»Ø¹Ë¡¡Java¡¡Beans¡¡¡¡¡¡



ÎÒÃÇÏÖÔÚÒÑÀí½âÁËͬ²½£¬½Ó×Å¿É»»´ÓÁíÒ»¸ö½Ç¶ÈÀ´¿¼²ìJava¡¡Beans¡£ÎÞÂÛʲôʱºò´´½¨ÁËÒ»¸öBean¡¡£¬¾Í±ØÐë¡¡

¼Ù¶¨ËüÒªÔÚÒ»¸ö¶àÏ̵߳Ļ·¾³ÖÐÔËÐС£ÕâÒâζ×Å£º¡¡¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡506¡¡


¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­Page¡¡508¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­

£¨1£©¡¡Ö»Òª¿ÉÐУ¬Bean¡¡µÄËùÓй«¹²·½·¨¶¼Ó¦Í¬²½¡£µ±È»£¬ÕâÒ²´øÀ´ÁË¡°Í¬²½¡±ÔÚÔËÐÐÆÚ¼äµÄ¿ªÏú¡£ÈôÌرðÔÚÒâ¡¡

Õâ¸öÎÊÌ⣬ÔڹؼüÇøÓòÖв»»áÔì³ÉÎÊÌâµÄ·½·¨¾Í¿É±£ÁôΪ¡°²»Í¬²½¡±£¬µ«×¢ÒâÕâͨ³£¶¼²»ÊÇÊ®·ÖÈÝÒ×Åжϡ£¡¡

ÓÐ×ʸñµÄ·½·¨ÇãÏòÓÚ¹æÄ£ºÜС£¨ÈçÏÂÀýµÄ¡¡getCircleSize£¨£©£©ÒÔ¼°£¯»òÕß¡°Î¢Ð¡¡±¡£Ò²¾ÍÊÇ˵£¬Õâ¸ö·½·¨µ÷¡¡

ÓÃÔÚÈç´ËÉٵĴúÂëƬÀïÖ´ÐУ¬ÒÔÖÁÓÚÔÚÖ´ÐÐÆÚ¼ä¶ÔÏó²»Äܸı䡣Èç¹û½«ÕâÖÖ·½·¨ÉèΪ¡°²»Í¬²½¡±£¬¿ÉÄܶԳ̡¡

ÐòµÄÖ´ÐÐËٶȲ»»áÓÐÃ÷ÏÔµÄÓ°Ïì¡£¿ÉÄÜÒ²½«Ò»¸öBean¡¡µÄËùÓÐpublic¡¡·½·¨¶¼ÉèΪ¡¡synchronized£¬²¢Ö»ÓÐÔÚ±£¡¡

Ö¤Ìرð±ØÒª¡¢¶øÇÒ»áÔì³ÉÒ»¸ö²îÒìµÄÇé¿öÏ£¬²Å½«¡¡synchronized¹Ø¼ü×Öɾȥ¡£¡¡¡¡

£¨2£©¡¡Èç¹û½«Ò»¸ö¶àÔìÐÍʼþË͸øһϵÁжÔÄǸöʼþ¸ÐÐËȤµÄ¡°ÌýÖÚ¡±£¬±ØÐë¼ÙÔÚÁбíÖÐÒƶ¯µÄʱºò¿ÉÒÔÌí¼Ó¡¡

»òÕßɾ³ý¡£¡¡¡¡

¡¡¡¡

µÚÒ»µãºÜÈÝÒ×´¦Àí£¬µ«µÚ¶þµãÐèÒª¿¼ÂǸü¶àµÄ¶«Î÷¡£ÈÃÎÒÃÇÒÔÇ°Ò»ÕÂÌṩµÄBangBean¡£java¡¡ÎªÀý¡£ÔÚÄǸöÀý¡¡

×ÓÖУ¬ÎÒÃǺöÂÔÁË¡¡synchronized¡¡¹Ø¼ü×Ö£¨ÄÇʱ»¹Ã»ÓÐÒýÈëÄØ£©£¬²¢½«ÔìÐÍÉèΪµ¥ÔìÐÍ£¬´Ó¶ø»Ø±ÜÁ˶àÏ̵߳ġ¡

ÎÊÌâ¡£ÔÚÏÂÃæÕâ¸öÐ޸ĹýµÄ°æ±¾ÖУ¬ÎÒÃÇʹÆäÄÜÔÚ¶àÏ̻߳·¾³Öй¤×÷£¬²¢ÎªÊ¼þ²ÉÓÃÁ˶àÔìÐͼ¼Êõ£º¡¡¡¡

¡¡¡¡

//£º¡¡BangBean2¡£java¡¡¡¡

//¡¡You¡¡should¡¡write¡¡your¡¡Beans¡¡this¡¡way¡¡so¡¡they¡¡¡¡¡¡

//¡¡can¡¡run¡¡in¡¡a¡¡multithreaded¡¡environment¡£¡¡¡¡

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

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

import¡¡java¡£util¡£*£»¡¡¡¡

import¡¡java¡£io¡£*£»¡¡¡¡

¡¡¡¡

public¡¡class¡¡BangBean2¡¡extends¡¡Canvas¡¡¡¡¡¡

¡¡¡¡¡¡¡¡implements¡¡Serializable¡¡£û¡¡¡¡

¡¡¡¡private¡¡int¡¡xm£»¡¡ym£»¡¡¡¡

¡¡¡¡private¡¡int¡¡cSize¡¡=¡¡20£»¡¡//¡¡Circle¡¡size¡¡¡¡

¡¡¡¡private¡¡String¡¡text¡¡=¡¡¡¨Bang£¡¡¨£»¡¡¡¡

¡¡¡¡private¡¡int¡¡fontSize¡¡=¡¡48£»¡¡¡¡

¡¡¡¡private¡¡Color¡¡tColor¡¡=¡¡Color¡£red£»¡¡¡¡

¡¡¡¡private¡¡Vector¡¡actionListeners¡¡=¡¡new¡¡Vector£¨£©£»¡¡¡¡

¡¡¡¡public¡¡BangBean2£¨£©¡¡£û¡¡¡¡

¡¡¡¡¡¡¡¡addMouseListener£¨new¡¡ML£¨£©£©£»¡¡¡¡

¡¡¡¡¡¡¡¡addMouseMotionListener£¨new¡¡MM£¨£©£©£»¡¡¡¡

¡¡¡¡£ý¡¡¡¡

¡¡¡¡public¡¡synchronized¡¡int¡¡getCircleSize£¨£©¡¡£û¡¡¡¡¡¡

¡¡¡¡¡¡¡¡return¡¡cSize£»¡¡¡¡¡¡

¡¡¡¡£ý¡¡¡¡

¡¡¡¡public¡¡synchronized¡¡void¡¡¡¡¡¡

¡¡¡¡setCircleSize£¨int¡¡newSize£©¡¡£û¡¡¡¡

¡¡¡¡¡¡¡¡cSize¡¡=¡¡newSize£»¡¡¡¡

¡¡¡¡£ý¡¡¡¡

¡¡¡¡public¡¡synchronized¡¡String¡¡getBangText£¨£©¡¡£û¡¡¡¡¡¡

¡¡¡¡¡¡¡¡return¡¡text£»¡¡¡¡¡¡

¡¡¡¡£ý¡¡¡¡

¡¡¡¡public¡¡synchronized¡¡void¡¡¡¡¡¡

¡¡¡¡setBangText£¨String¡¡newText£©¡¡£û¡¡¡¡

¡¡¡¡¡¡¡¡text¡¡=¡¡newText£»¡¡¡¡

¡¡¡¡£ý¡¡¡¡

¡¡¡¡public¡¡synchronized¡¡int¡¡getFontSize£¨£©¡¡£û¡¡¡¡¡¡

¡¡¡¡¡¡¡¡return¡¡fontSize£»¡¡¡¡¡¡

¡¡¡¡£ý¡¡¡¡

¡¡¡¡public¡¡synchronized¡¡void¡¡¡¡¡¡

¡¡¡¡setFontSize£¨int¡¡newSize£©¡¡£û¡¡¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡507¡¡


¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­Page¡¡509¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­

¡¡¡¡¡¡¡¡fontSize¡¡=¡¡newSize£»¡¡¡¡

¡¡¡¡£ý¡¡¡¡

¡¡¡¡public¡¡synchronized¡¡Color¡¡getTextColor£¨£©¡¡£û¡¡¡¡

¡¡¡¡¡¡¡¡return¡¡tColor£»¡¡¡¡¡¡

¡¡¡¡£ý¡¡¡¡

¡¡¡¡public¡¡synchronized¡¡void¡¡¡¡¡¡

¡¡¡¡setTextColor£¨Color¡¡newColor£©¡¡£û¡¡¡¡

¡¡¡¡¡¡¡¡tColor¡¡=¡¡newColor£»¡¡¡¡

¡¡¡¡£ý¡¡¡¡

¡¡¡¡public¡¡void¡¡paint£¨Graphics¡¡g£©¡¡£û¡¡¡¡

¡¡¡¡¡¡¡¡g¡£setColor£¨Color¡£black£©£»¡¡¡¡

¡¡¡¡¡¡¡¡g¡£drawOval£¨xm¡¡cSize/2£»¡¡ym¡¡cSize/2£»¡¡¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡cSize£»¡¡cSize£©£»¡¡¡¡

¡¡¡¡£ý¡¡¡¡

¡¡¡¡//¡¡This¡¡is¡¡a¡¡multicast¡¡listener£»¡¡which¡¡is¡¡¡¡

¡¡¡¡//¡¡more¡¡typically¡¡used¡¡than¡¡the¡¡unicast¡¡¡¡

¡¡¡¡//¡¡approach¡¡taken¡¡in¡¡BangBean¡£java£º¡¡¡¡

¡¡¡¡public¡¡synchronized¡¡void¡¡addActionListener¡¡£¨¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡ActionListener¡¡l£©¡¡£û¡¡¡¡

¡¡¡¡¡¡¡¡actionListeners¡£addElement£¨l£©£»¡¡¡¡

¡¡¡¡£ý¡¡¡¡

¡¡¡¡public¡¡synchronized¡¡void¡¡removeActionListener£¨¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡ActionListener¡¡l£©¡¡£û¡¡¡¡

¡¡¡¡¡¡¡¡actionListeners¡£removeElement£¨l£©£»¡¡¡¡

¡¡¡¡£ý¡¡¡¡

¡¡¡¡//¡¡Notice¡¡this¡¡isn't¡¡synchronized£º¡¡¡¡

¡¡¡¡public¡¡void¡¡notifyListeners£¨£©¡¡£û¡¡¡¡

¡¡¡¡¡¡¡¡ActionEvent¡¡a¡¡=¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡new¡¡ActionEvent£¨BangBean2¡£this£»¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ActionEvent¡£ACTION_PERFORMED£»¡¡null£©£»¡¡¡¡

¡¡¡¡¡¡¡¡Vector¡¡lv¡¡=¡¡null£»¡¡¡¡

¡¡¡¡¡¡¡¡//¡¡Make¡¡a¡¡copy¡¡of¡¡the¡¡vector¡¡in¡¡case¡¡someone¡¡¡¡

¡¡¡¡¡¡¡¡//¡¡adds¡¡a¡¡listener¡¡while¡¡we're¡¡¡¡¡¡

¡¡¡¡¡¡¡¡//¡¡calling¡¡listeners£º¡¡¡¡

¡¡¡¡¡¡¡¡synchronized£¨this£©¡¡£û¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡lv¡¡=¡¡£¨Vector£©actionListeners¡£clone£¨£©£»¡¡¡¡

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

¡¡¡¡¡¡¡¡//¡¡Call¡¡all¡¡the¡¡listener¡¡methods£º¡¡¡¡

¡¡¡¡¡¡¡¡for£¨int¡¡i¡¡=¡¡0£»¡¡i¡¡¡¶¡¡lv¡£size£¨£©£»¡¡i£«£«£©¡¡£û¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡ActionListener¡¡al¡¡=¡¡¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£¨ActionListener£©lv¡£elementAt£¨i£©£»¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡al¡£actionPerformed£¨a£©£»¡¡¡¡

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

¡¡¡¡£ý¡¡¡¡

¡¡¡¡class¡¡ML¡¡extends¡¡MouseAdapter¡¡£û¡¡¡¡

¡¡¡¡¡¡¡¡public¡¡void¡¡mousePressed£¨MouseEvent¡¡e£©¡¡£û¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡Graphics¡¡g¡¡=¡¡getGraphics£¨£©£»¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡g¡£setColor£¨tColor£©£»¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡g¡£setFont£¨¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡new¡¡Font£¨¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¨TimesRoman¡¨£»¡¡Font¡£BOLD£»¡¡fontSize£©£©£»¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡int¡¡width¡¡=¡¡¡¡¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡508¡¡


¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­Page¡¡510¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡g¡£getFontMetrics£¨£©¡£stringWidth£¨text£©£»¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡g¡£drawString£¨text£»¡¡¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£¨getSize£¨£©¡£width¡¡width£©¡¡/2£»¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡getSize£¨£©¡£height/2£©£»¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡g¡£dispose£¨£©£»¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡notifyListeners£¨£©£»¡¡¡¡

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

¡¡¡¡£ý¡¡¡¡

¡¡¡¡class¡¡MM¡¡extends¡¡MouseMotionAdapter¡¡£û¡¡¡¡

¡¡¡¡¡¡¡¡public¡¡void¡¡mouseMoved£¨MouseEvent¡¡e£©¡¡£û¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡xm¡¡=¡¡e¡£getX£¨£©£»¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡ym¡¡=¡¡e¡£getY£¨£©£»¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡repaint£¨£©£»¡¡¡¡

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

¡¡¡¡£ý¡¡¡¡

¡¡¡¡//¡¡Testing¡¡the¡¡BangBean2£º¡¡¡¡

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

¡¡¡¡¡¡¡¡BangBean2¡¡bb¡¡=¡¡new¡¡BangBean2£¨£©£»¡¡¡¡

¡¡¡¡¡¡¡¡bb¡£addActionListener£¨new¡¡ActionListener£¨£©¡¡£û¡¡¡¡

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

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡System¡£out¡£println£¨¡¨ActionEvent¡¨¡¡£«¡¡e£©£»¡¡¡¡

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

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

¡¡¡¡¡¡¡¡bb¡£addActionListener£¨new¡¡ActionListener£¨£©¡¡£û¡¡¡¡

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

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡System¡£out¡£println£¨¡¨BangBean2¡¡action¡¨£©£»¡¡¡¡

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

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

¡¡¡¡¡¡¡¡bb¡£addActionListener£¨new¡¡ActionListener£¨£©¡¡£û¡¡¡¡

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

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡System¡£out¡£println£¨¡¨More¡¡action¡¨£©£»¡¡¡¡

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

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

¡¡¡¡¡¡¡¡Frame¡¡aFrame¡¡=¡¡new¡¡Frame£¨¡¨BangBean2¡¡Test¡¨£©£»¡¡¡¡

¡¡¡¡¡¡¡¡aFrame¡£addWindowListener£¨new¡¡WindowAdapter£¨£©£û¡¡¡¡

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

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

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

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

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

¡¡¡¡¡¡¡¡aFrame¡£setSize£¨300£»300£©£»¡¡¡¡

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

¡¡¡¡£ý¡¡¡¡

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

¡¡¡¡

ºÜÈÝÒ׾ͿÉÒÔΪ·½·¨Ìí¼Ósynchronized¡£µ«×¢ÒâÔÚaddActionListener£¨£©ºÍ¡¡removeActionListener£¨£©ÖУ¬ÏÖ¡¡

ÔÚÌí¼ÓÁËActionListener£¬²¢´ÓÒ»¸ö¡¡Vector¡¡ÖÐÒÆÈ¥£¬ËùÒÔÄܹ»¸ù¾Ý×Ô¼ºÔ¸ÍûʹÓÃÈÎÒâ¶à¸ö¡£¡¡¡¡

ÎÒÃÇ×¢Òâµ½£¬notifyListeners£¨£©·½·¨²¢Î´ÉèΪ¡°Í¬²½¡±¡£¿É´Ó¶à¸öÏß³ÌÖз¢³ö¶ÔÕâ¸ö·½·¨µÄµ÷Óá£ÁíÍ⣬ÔÚ¡¡

¶ÔnotifyListeners£¨£©µ÷ÓõÄÖÐ;£¬Ò²¿ÉÄÜ·¢³ö¶ÔaddActionListener£¨£©ºÍ¡¡removeActionListener£¨£©¡¡µÄµ÷¡¡

Óá£ÕâÏÔÈ»»áÔì³ÉÎÊÌ⣬ÒòΪËü·ñ¶¨ÁËVector¡¡actionListeners¡¡¡£Îª»º½âÕâ¸öÎÊÌ⣬ÎÒÃÇÔÚÒ»¸ö¡¡

synchronized´Ó¾äÖС°¿Ë¡¡±ÁË¡¡Vector£¬²¢¶Ô¿Ë¡½øÐÐÁË·ñ¶¨¡£ÕâÑù±ã¿ÉÔÚ²»Ó°ÏìnotifyListeners£¨£©µÄÇ°¡¡

ÌáÏ£¬¶ÔVector¡¡½øÐвÙ×Ý¡£¡¡¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡509¡¡


¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­Page¡¡511¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­

paint£¨£©·½·¨Ò²Ã»ÓÐÉèΪ¡°Í¬²½¡±¡£Óëµ¥´¿µØÌí¼Ó×Ô¼ºµÄ·½·¨Ïà±È£¬¾ö¶¨ÊÇ·ñ¶Ô¹ýÔصķ½·¨½øÐÐͬ²½ÒªÀ§Äѵá¡

¶à¡£ÔÚÕâ¸öÀý×ÓÖУ¬ÎÞÂÛpaint£¨£©ÊÇ·ñ¡°Í¬²½¡±£¬ËüËƺõ¶¼ÄÜÕý³£µØ¹¤×÷¡£µ«±ØÐ뿼ÂǵÄÎÊÌâ°üÀ¨£º¡¡¡¡

£¨1£©¡¡·½·¨»áÔÚ¶ÔÏóÄÚ²¿Ð޸ġ°¹Ø¼ü¡±±äÁ¿µÄ״̬Âð£¿ÎªÅжÏÒ»¸ö±äÁ¿ÊÇ·ñ¡°¹Ø¼ü¡±£¬±ØÐëÖªµÀËüÊÇ·ñ»á±»³Ì¡¡

ÐòÖеÄÆäËûÏ̶߳ÁÈ¡»òÉèÖ㨾ÍÄ¿Ç°µÄÇé¿ö¿´£¬¶ÁÈ¡»òÉèÖü¸ºõ¿Ï¶¨ÊÇͨ¹ý¡°Í¬²½¡±·½·¨½øÐеģ¬ËùÒÔ¿ÉÒÔ¡¡

Ö»¶ÔËüÃǽøÐмì²é£©¡£¶Ôpaint£¨£©µÄÇé¿öÀ´Ëµ£¬²»»á·¢ÉúÈκÎÐ޸ġ£¡¡¡¡

£¨2£©¡¡·½·¨ÒªÒÔÕâЩ¡°¹Ø¼ü¡±±äÁ¿µÄ״̬Ϊ»ù´¡Âð£¿Èç¹ûÒ»¸ö¡°Í¬²½¡±·½·¨ÐÞ¸ÄÁËÒ»¸ö±äÁ¿£¬¶øÎÒÃǵķ½·¨Òª¡¡

Óõ½Õâ¸ö±äÁ¿£¬ÄÇôһ°ã¶¼Ô¸Òâ°Ñ×Ô¼ºµÄ·½·¨Ò²ÉèΪ¡°Í¬²½¡±¡£»ùÓÚÕâһǰÌᣬ´ó¼Ò¿É¹Û²ìµ½cSize¡¡ÓÉ¡°Í¬¡¡

²½¡±·½·¨½øÐÐÁËÐ޸ģ¬ËùÒÔpaint£¨£©Ó¦µ±ÊÇ¡°Í¬²½¡±µÄ¡£µ«ÔÚÕâÀÎÒÃÇ¿ÉÒÔÎÊ£º¡°¼ÙÈç¡¡cSize¡¡ÔÚpaint£¨£©Ö´¡¡

ÐÐÆڼ䷢ÉúÁ˱仯£¬»á·¢ÉúµÄ×îÔã¸âµÄÊÂÇéÊÇʲôÄØ£¿¡±Èç¹û·¢ÏÖÇé¿ö²»ËãÌ«»µ£¬¶øÇÒ½ö½öÊÇÔÝʱµÄЧ¹û£¬¡¡

ÄÇô×îºÃ±£³Öpaint£¨£©µÄ¡°²»Í¬²½¡±×´Ì¬£¬ÒÔ±ÜÃâͬ²½·½·¨µ÷ÓôøÀ´µÄ¶îÍ⿪Ïú¡£¡¡¡¡

£¨3£©¡¡ÒªÁôÒâµÄµÚÈýÌõÏßË÷ÊÇ¡¡paint£¨£©»ù´¡Àà°æ±¾ÊÇ·ñ¡°Í¬²½¡±£¬ÔÚÕâÀïËü²»ÊÇͬ²½µÄ¡£Õâ²¢²»ÊÇÒ»¸ö·Ç³£ÑÏ¡¡

¸ñµÄ²ÎÊý£¬½ö½öÊÇÒ»Ìõ¡°ÏßË÷¡±¡£±ÈÈçÔÚÄ¿Ç°µÄÇé¿öÏ£¬Í¨¹ýͬ²½·½·¨£¨ºÃcSize£©¸Ä±äµÄÒ»¸ö×Ö¶ÎÒѺϳɡ¡

µ½paint£¨£©¹«Ê½À¶øÇÒ¿ÉÄÜÒѸıäÁËÇé¿ö¡£µ«Çë×¢Ò⣬synchronized²»Äܼ̳Сª¡ªÒ²¾ÍÊÇ˵£¬¼ÙÈçÒ»¸ö·½¡¡

·¨ÔÚ»ù´¡ÀàÖÐÊÇ¡°Í¬²½¡±µÄ£¬ÄÇôÔÚÑÜÉúÀà¹ýÔØ°æ±¾ÖУ¬Ëü²»»á×Ô¶¯½øÈ롰ͬ²½¡±×´Ì¬¡£¡¡¡¡

TestBangBean2¡¡ÖеIJâÊÔ´úÂëÒÑÔÚÇ°Ò»ÕµĻù´¡ÉϽøÐÐÁËÐ޸ģ¬ÒÑÔÚÆäÖмÓÈëÁ˶îÍâµÄ¡°ÌýÖÚ¡±£¬´Ó¶øÑÝʾ¡¡

ÁËBangBean2¡¡µÄ¶àÔìÐÍÄÜÁ¦¡£¡¡¡¡



14¡£3¡¡¶ÂÈû¡¡¡¡



Ò»¸öÏ߳̿ÉÒÔÓÐËÄÖÖ״̬£º¡¡¡¡

£¨1£©¡¡Ð£¨New£©£ºÏ̶߳ÔÏóÒѾ­´´½¨£¬µ«ÉÐδÆô¶¯£¬ËùÒÔ²»¿ÉÔËÐС£¡¡¡¡

£¨2£©¡¡¿ÉÔËÐУ¨Runnable¡¡£©£ºÒâζ×ÅÒ»µ©Ê±¼ä·ÖƬ»úÖÆÓпÕÏеÄCPU¡¡ÖÜÆÚÌṩ¸øÒ»¸öỊ̈߳¬ÄǸöÏ̱߳ã¿ÉÁ¢¼´¡¡

¿ªÊ¼ÔËÐС£Òò´Ë£¬Ï߳̿ÉÄÜÔÚ¡¢Ò²¿ÉÄܲ»ÔÚÔËÐе±ÖУ

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

Äã¿ÉÄÜϲ»¶µÄ