Java±à³Ì˼ÏëµÚ4°æ[ÖÐÎÄ°æ](PDF¸ñʽ)-µÚ131²¿·Ö
°´¼üÅÌÉÏ·½Ïò¼ü ¡û »ò ¡ú ¿É¿ìËÙÉÏÏ·ҳ£¬°´¼üÅÌÉ쵀 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¡¡ÖÜÆÚÌṩ¸øÒ»¸öỊ̈߳¬ÄǸöÏ̱߳ã¿ÉÁ¢¼´¡¡
¿ªÊ¼ÔËÐС£Òò´Ë£¬Ï߳̿ÉÄÜÔÚ¡¢Ò²¿ÉÄܲ»ÔÚÔËÐе±ÖУ