1.
¼ÆËã»úϵͳ
ʹÓøßËÙ»º´æÀ´×÷ΪÄÚ´æÓë´¦ÀíÆ÷Ö®¼äµÄ»º³å£¬½«ÔËËãÐèÒªÓõ½µÄÊý¾Ý¸´ÖƵ½»º´æÖУ¬ÈüÆËãÄÜ¿ìËÙ½øÐУ»µ±ÔËËã½áÊøºóÔÙ´Ó»º´æÍ¬²½»ØÄÚ´æÖ®ÖУ¬ÕâÑù´¦ÀíÆ÷¾ÍÎÞÐèµÈ´ý»ºÂýµÄÄÚ´æ¶ÁдÁË¡£
»º´æÒ»ÖÂÐÔ£º¶à´¦ÀíÆ÷ϵͳÖУ¬ÒòΪ¹²ÏíͬһÖ÷Äڴ棬µ±¶à¸ö´¦ÀíÆ÷µÄÔËËãÈÎÎñ¶¼Éè¼Æµ½Í¬Ò»¿éÄÚ´æÇøÓòʱ£¬½«¿ÉÄܵ¼Ö¸÷×ԵĻº´æÊý¾Ý²»Ò»ÖµÄÇé¿ö£¬Ôòͬ²½»ØÖ÷ÄÚ´æÊ±ÐèÒª×ñÑһЩÐÒé¡£
ÂÒÐòÖ´ÐÐÓÅ»¯£ºÎªÁËʹµÃ´¦ÀíÆ÷ÄÚ²¿µÄÔËË㵥λÄܾ¡Á¿±»³ä·ÖÀûÓá£
2. JAVAÄÚ´æÄ£ÐÍ
Ä¿±êÊǶ¨Òå³ÌÐòÖи÷¸ö±äÁ¿µÄ·ÃÎʹæÔò¡£(°üÀ¨ÊµÀý×ֶΡ¢¾²Ì¬×ֶκ͹¹³ÉÊý×éµÄÔªËØ£¬²»°üÀ¨¾Ö²¿±äÁ¿ºÍ·½·¨²ÎÊý)
1.ËùÓеıäÁ¿¶¼´æ´¢ÔÚÖ÷ÄÚ´æÖÐ(ÐéÄâ»úÄÚ´æµÄÒ»²¿·Ö)¡£
2.ÿÌõÏ̶߳¼ÓÉ×Ô¼ºµÄ¹¤×÷Äڴ棬Ï̵߳Ť×÷ÄÚ´æÖб£´æÁ˸ÃÏß³ÌʹÓõ½µÄ±äÁ¿µÄÖ÷Äڴ渱±¾¿½±´£¬Ï̶߳ԱäÁ¿µÄËùÓвÙ×÷¶¼±ØÐëÔÚ¹¤×÷ÄÚ´æÖнøÐУ¬¶ø²»ÄÜÖ±½Ó¶ÁдÖ÷ÄÚ´æÖеıäÁ¿¡£
3.Ïß³ÌÖ®¼äÎÞ·¨Ö±½Ó·ÃÎʶԷ½µÄ¹¤×÷ÄÚ´æÖеıäÁ¿£¬Ï̼߳ä±äÁ¿µÄ´«µÝ¾ùÐèҪͨ¹ýÖ÷ÄÚ´æÀ´Íê³É¡£
ÄÚ´æ¼ä½»»¥²Ù×÷£º
Lock(Ëø¶¨)£º×÷ÓÃÓÚÖ÷ÄÚ´æÖеıäÁ¿£¬°ÑÒ»¸ö±äÁ¿±êʶΪһÌõÏ̶߳ÀÕ¼µÄ״̬¡£
Read(¶ÁÈ¡)£º×÷ÓÃÓÚÖ÷ÄÚ´æÖеıäÁ¿£¬°ÑÒ»¸ö±äÁ¿µÄÖµ´ÓÖ÷ÄÚ´æ´«Êäµ½Ï̵߳Ť×÷ÄÚ´æÖС£
Load(¼ÓÔØ)£º×÷ÓÃÓÚ¹¤×÷ÄÚ´æÖеıäÁ¿£¬°Ñread²Ù×÷´ÓÖ÷ÄÚ´æÖеõ½µÄ±äÁ¿µÄÖµ·ÅÈ빤×÷ÄÚ´æµÄ±äÁ¿¸±±¾ÖС£
Use(ʹÓÃ)£º×÷ÓÃÓÚ¹¤×÷ÄÚ´æÖеıäÁ¿£¬°Ñ¹¤×÷ÄÚ´æÖÐÒ»¸ö±äÁ¿µÄÖµ´«µÝ¸øÖ´ÐÐÒýÇæ¡£
Assign(¸³Öµ)£º×÷ÓÃÓÚ¹¤×÷ÄÚ´æÖеıäÁ¿£¬°ÑÒ»¸ö´ÓÖ´ÐÐÒýÇæ½ÓÊÕµ½µÄÖµ¸³Öµ¸ø¹¤×÷ÄÚ´æÖеıäÁ¿¡£
Store(´æ´¢)£º×÷ÓÃÓÚ¹¤×÷ÄÚ´æÖеıäÁ¿£¬°Ñ¹¤×÷ÄÚ´æÖеÄÒ»¸ö±äÁ¿µÄÖµ´«Ë͵½Ö÷ÄÚ´æÖС£
Write(дÈë)£º×÷ÓÃÓÚÖ÷ÄÚ´æÖеıäÁ¿£¬°Ñstore²Ù×÷´Ó¹¤×÷ÄÚ´æÖеõ½µÄ±äÁ¿µÄÖµ·ÅÈëÖ÷ÄÚ´æµÄ±äÁ¿ÖС£
Unlock(½âËø)£º×÷ÓÃÓÚÖ÷ÄÚ´æÖеıäÁ¿£¬°ÑÒ»¸ö´¦ÓÚËø¶¨×´Ì¬µÄ±äÁ¿ÊͷųöÀ´£¬Ö®ºó¿É±»ÆäËüÏß³ÌËø¶¨¡£
¹æÔò£º
1.²»ÔÊÐíreadºÍload¡¢storeºÍwrite²Ù×÷Ö®Ò»µ¥¶À³öÏÖ¡£
2.²»ÔÊÐíÒ»¸öÏ̶߳ªÆú×î½üµÄassign²Ù×÷£¬±äÁ¿ÔÚ¹¤×÷ÄÚ´æÖиıäÁËÖ®ºó±ØÐë°Ñ¸Ã±ä»¯Í¬²½»ØÖ÷ÄÚ´æÖС£
3.²»ÔÊÐíÒ»¸öÏß³ÌûÓз¢Éú¹ýÈκÎassign²Ù×÷°ÑÊý¾Ý´ÓÏ̵߳Ť×÷ÄÚ´æÍ¬²½»ØÖ÷ÄÚ´æÖС£
4.Ò»¸öеıäÁ¿Ö»ÄÜÔÚÖ÷ÄÚ´æÖе®Éú¡£
5.Ò»¸ö±äÁ¿ÔÚͬһʱ¿ÌÖ»ÔÊÐíÒ»ÌõÏß³Ì¶ÔÆä½øÐÐlock²Ù×÷£¬µ«¿ÉÒÔ±»Í¬Ò»ÌõÏß³ÌÖØ¸´Ö´Ðжà´Î¡£
6.Èç¹û¶ÔÒ»¸ö±äÁ¿Ö´ÐÐlock²Ù×÷£¬½«»áÇå¿Õ¹¤×÷ÄÚ´æÖд˱äÁ¿µÄÖµ£¬ÔÚÖ´ÐÐÒýÇæÊ¹ÓÃÕâ¸ö±äÁ¿Ç°£¬ÐèÒªÖØÐÂÖ´ÐÐread¡¢load²Ù×÷¡£
7.Èç¹ûÒ»¸ö±äÁ¿ÊÂÏÈûÓб»lock²Ù×÷Ëø¶¨£¬Ôò²»ÔÊÐí¶ÔËüÖ´ÐÐunlock²Ù×÷¡£
8. ¶ÔÒ»¸ö±äÁ¿Ö´ÐÐunlock²Ù×÷ǰ£¬±ØÐëÏȰѸñäÁ¿Í¬²½»ØÖ÷ÄÚ´æÖС£
3. volatileÐͱäÁ¿
1.±£Ö¤´Ë±äÁ¿¶ÔËùÓÐÏ̵߳ĿɼûÐÔ¡£Ã¿ÌõÏß³ÌʹÓôËÀàÐͱäÁ¿Ç°¶¼ÐèÒªÏÈˢУ¬Ö´ÐÐÒýÇæ¿´²»µ½²»Ò»ÖµÄÇé¿ö¡£
ÔËËã½á¹û²¢²»ÒÀÀµ±äÁ¿µÄµ±Ç°Öµ¡¢»òÕßÈ·±£Ö»Óе¥Ò»µÄÏß³ÌÐ޸ıäÁ¿µÄÖµ¡£
±äÁ¿²»ÐèÒªÓëÆäËûµÄ״̬±äÁ¿¹²Í¬²ÎÓë²»±äÔ¼Êø¡£
1.½ûÖ¹Ö¸ÁîÖØÅÅÐòÓÅ»¯¡£ÆÕͨµÄ±äÁ¿½ö±£Ö¤ÔÚ·½·¨Ö´Ðйý³ÌÖÐËùÓÐÒÀÀµ¸³Öµ½á¹ûµÄµØ·½¶¼ÄÜ»ñÈ¡µ½ÕýÈ·µÄ½á¹û¡£¶ø²»Äܱ£Ö¤¸³Öµ²Ù×÷µÄ˳ÐòÓë³ÌÐò´úÂëÖеÄ˳ÐòÒ»Ö¡£
2.load±ØÐëÓëuseͬʱ³öÏÖ£»assignºÍstore±ØÐëͬʱ³öÏÖ¡£
4. Ô×ÓÐÔ¡¢¿É¼ûÐÔÓëÓÐÐòÐÔ
Ô×ÓÐÔ£º»ù±¾Êý¾ÝÀàÐ͵ķÃÎʶÁдÊǾ߱¸Ô×ÓÐԵģ¬synchronized¿éÖ®¼äµÄ²Ù×÷Ò²¾ß±¸Ô×ÓÐÔ¡£
¿É¼ûÐÔ£ºÖ¸µ±Ò»¸öÏß³ÌÐÞ¸ÄÁ˹²Ïí±äÁ¿µÄÖµ£¬ÆäËûÏß³ÌÄܹ»Á¢¼´µÃÖªÕâ¸öÐ޸ġ£synchronized(¹æÔò8)ºÍfinal¿ÉÒÔ±£Ö¤¿É¼ûÐÔ¡£FinalÐÞÊεÄ×Ö¶ÎÔÚ¹¹ÔìÆ÷ÖÐÒ»µ©±»³õʼ»¯Íê³É£¬²¢ÇÒ¹¹ÔìÆ÷ûÓаÑthisµÄÒýÓô«µÝ³öÈ¥£¬ÄÇôÔÚÆäËûÏß³ÌÖоÍÄÜ¿´¼ûfinal×ֶεÄÖµ¡£
ÓÐÐòÐÔ£ºvolatile±¾Éí°üº¬Á˽ûÖ¹Ö¸ÁîÖØÅÅÐòµÄÓïÒ壬¶øsynchronizedÔòÊÇÓɹæÔò5»ñµÃµÄ£¬Õâ¸ö¹æÔò¾ö¶¨Á˳ÖÓÐͬһ¸öËùµÄÁ½¸öͬ²½¿éÖ»ÄÜ´®ÐеؽøÈë¡£
5. ÏÈÐз¢ÉúÔÔò
JavaÄÚ´æÄ£ÐÍÖж¨ÒåµÄÁ½Ïî²Ù×÷Ö®¼äµÄÆ«Ðò¹ØÏµ£¬Èç¹û²Ù×÷AÏÈÐз¢ÉúÓÚ²Ù×÷B£¬Æäʵ¾ÍÊÇ˵ÔÚ·¢Éú²Ù×÷B֮ǰ£¬²Ù×÷A²úÉúµÄÓ°ÏìÄܱ»²Ù×÷B¹Û²ìµ½¡£
³ÌÐò´ÎÐò¹æÔò£ºÔÚÒ»¸öÏß³ÌÄÚ£¬°´ÕÕ´úÂë¿ØÖÆÁ÷˳Ðò£¬ÔÚÇ°ÃæµÄ²Ù×÷ÏÈÐз¢ÉúÓÚºóÃæµÄ²Ù×÷¡£
¹Ü³ÌËø¶¨¹æÔò£ºÒ»¸öunlock²Ù×÷ÏÈÐз¢ÉúÓÚºóÃæ¶Ôͬһ¸öËøµÄlock²Ù×÷¡£
Volatile±äÁ¿¹æÔò£º¶ÔÒ»¸övolatile±äÁ¿µÄд²Ù×÷ÏÈÐз¢ÉúÓÚºóÃæ¶ÔÕâ¸ö±äÁ¿µÄ¶Á²Ù×÷¡£
Ïß³ÌÆô¶¯¹æÔò£ºThread¶ÔÏóµÄstart()·½·¨ÏÈÐз¢ÉúÓÚ´ËÏ̵߳Äÿ¸ö²Ù×÷¡£
Ïß³ÌÖÕÖ¹¹æÔò£ºÏß³ÌÖеÄËùÓвÙ×÷¶¼ÏÈÐз¢ÉúÓÚ¶Ô´ËÏ̵߳ÄÖÕÖ¹¼ì²â¡£
Ïß³ÌÖжϹæÔò£º¶ÔÏ̵߳Äinterrupt()·½·¨µÄµ÷ÓÃÏÈÐз¢ÉúÓÚ±»ÖжÏÏ̵߳ĴúÂë¼ì²âÖжÏʼþµÄ·¢Éú¡£
¶ÔÏóÖÕ½á¹ýÔò£ºÒ»¸ö¶ÔÏóµÄ³õʼ»¯Íê³ÉÏÈÐз¢ÉúÓÚËüµÄfinalize()·½·¨µÄ¿ªÊ¼¡£
´«µÝÐÔ£ºÈç¹û²Ù×÷AÏÈÐз¢ÉúÓÚ²Ù×÷B£¬²Ù×÷BÏÖÏó·¢ÉúÓÚ²Ù×÷C£¬ÄÇô¾Í¿ÉÒԵóö²Ù×÷AÏÈÐз¢ÉúÓÚ²Ù×÷CµÄ½áÂÛ¡£
ʱ¼äÉϵÄÏȺó˳ÐòÓëÏÈÐз¢ÉúÔÔòÖ®¼ä»ù±¾ÉÏûÓÐÌ«´óµÄ¹ØÏµ¡£
6. Ïß³ÌʵÏÖ
ʹÓÃÄÚºËÏß³ÌʵÏÖ£º
ÄÚºËÏß³ÌKernel Thread£ºÖ±½ÓÓɲÙ×÷ϵͳÄÚºËÖ§³ÖµÄỊ̈߳¬ÕâÖÖÏß³ÌÓÉÄÚºËÀàÍê³ÉÏß³ÌÇл»£¬ÄÚºËͨ¹ý²Ù×ݵ÷¶ÈÆ÷¶ÔÏ߳̽øÐе÷¶È£¬²¢¸ºÔð½«Ï̵߳ÄÈÎÎñÓ³Éäµ½¸÷¸ö´¦ÀíÆ÷ÉÏ¡£
ÇáÁ¿¼¶½ø³ÌLight Weight Process£ºÃ¿¸öÇáÁ¿¼¶½ø³Ì¶¼ÓÉÒ»¸öÄÚºËÏß³ÌÖ§³Ö¡£
¾ÖÏÞÐÔ£º¸÷ÖÖ½ø³Ì²Ù×÷¶¼ÐèÒª½øÐÐϵͳµ÷ÓÃ(ϵͳµ÷Óôú¼ÛÏà¶Ô½Ï¸ß£¬ÐèÒªÔÚÓû§Ì¬ºÍÄÚºË̬ÖÐÀ´»ØÇл»)£»ÇáÁ¿¼¶½ø³ÌÒªÏûºÄÒ»¶¨µÄÄÚºË×ÊÔ´£¬Ò»´ÎÒ»¸öϵͳ֧³ÖÇáÁ¿¼¶½ø³ÌµÄÊýÁ¿ÊÇÓÐÏ޵ġ£
ʹÓÃÓû§Ïß³ÌʵÏÖ£º
Óû§Ị̈߳ºÍêÈ«½¨Á¢ÔÚÓû§¿Õ¼äµÄÏ߳̿âÉÏ£¬ÏµÍ³Äں˲»ÄÜÖ±½Ó¸ÐÖªµ½Ï̴߳æÔÚµÄʵÏÖ¡£Óû§Ï̵߳Ľ¨Á¢¡¢Í¬²½¡¢Ïú»ÙºÍµ÷¶ÈÍêÈ«ÔÚÓû§Ì¬ÖÐÍê³É£¬²»ÐèÒªÄں˵İïÖú¡£ËùÓеÄÏ̲߳Ù×÷¶¼ÐèÒªÓû§³ÌÐò×Ô¼º´¦Àí¡£
»ìºÏʵÏÖ£º
½«ÄÚºËÏ̺߳ÍÓû§Ïß³ÌÒ»ÆðʹÓõķ½Ê½¡£²Ù×÷ϵͳÌṩ֧³ÖµÄÇáÁ¿¼¶½ø³ÌÔò×÷ΪÓû§Ï̺߳ÍÄÚºËÏß³ÌÖ®¼äµÄÇÅÁº¡£
Sun JDK£¬ËüµÄWindows°æºÍLinux°æ¶¼ÊÇʹÓÃÒ»¶ÔÒ»µÄÏß³ÌÄ£ÐÍÀ´ÊµÏֵģ¬Ò»ÌõJavaÏß³ÌÓ³Éäµ½Ò»ÌõÇáÁ¿¼¶½ø³ÌÖ®ÖС£
7. Ï̵߳÷¶È
Ï̵߳÷¶ÈÊÇָϵͳΪÏ̷߳ÖÅä´¦ÀíÆ÷ʹÓÃȨµÄ¹ý³Ì£ºÐͬʽ¡¢ÇÀռʽ¡£
Ðͬʽ£ºÏ̵߳ÄÖ´ÐÐʱ¼äÓÉÏ̱߳¾Éí¿ØÖÆ£¬Ḭ̈߳Ñ×Ô¼ºµÄ¹¤×÷Ö´ÐÐÍêÁËÖ®ºó£¬ÒªÖ÷¶¯Í¨ÖªÏµÍ³Çл»µ½ÁíÒ»¸öÏß³ÌÉÏ¡£»µ´¦£ºÏß³ÌÖ´ÐÐʱ¼ä²»¿É¿ØÖÆ¡£
ÇÀռʽ£ºÃ¿¸öÏ߳̽«ÓÉϵͳÀ´·ÖÅäÖ´ÐÐʱ¼ä£¬Ï̵߳ÄÇл»²»ÓÉÏ̱߳¾ÉíÀ´¾ö¶¨¡£JavaʹÓøÃÖÖµ÷Ó÷½Ê½¡£
Ïß³ÌÓÅÏȼ¶£ºÔÚһЩƽ̨ÉÏ(²Ù×÷ϵͳÏß³ÌÓÅÏȼ¶±ÈJavaÏß³ÌÓÅÏȼ¶ÉÙ)²»Í¬µÄÓÅÏȼ¶Êµ¼Ê»á±äµÃÏàͬ£»ÓÅÏȼ¶¿ÉÄܻᱻϵͳ×ÔÐиı䡣
8. Ïß³Ì״̬
Ïß³Ì״̬£º
н¨NEW£º
ÔËÐÐRUNNABLE£º
ÎÞÏÞÆÚµÈ´ýWAITING£ºµÈµÃÆäËûÏß³ÌÏÔʽµØ»½ÐÑ¡£
ûÓÐÉèÖÃTimeout²ÎÊýµÄObject.wait()£»Ã»ÓÐÉèÖÃTimeout²ÎÊýµÄThread.wait()¡£
ÏÞÆÚµÈ´ýTIMED_WAITING£ºÔÚÒ»¶¨Ê±¼äÖ®ºó»áÓÉϵͳ×Ô¶¯»½ÐÑ¡£
ÉèÖÃTimeout²ÎÊýµÄObject.wait()£»ÉèÖÃTimeout²ÎÊýµÄThread.wait()£»Thread.sleep()·½·¨¡£
×èÈûBLOCKED£ºµÈ´ý»ñȡһ¸öÅÅËüËø£¬µÈ´ý½øÈëÒ»¸öͬ²½ÇøÓò¡£
½áÊøTERMINATED£º
9. Ḭ̈߳²È«
Ḭ̈߳²È«£ºµ±¶à¸öÏ̷߳ÃÎÊÒ»¸ö¶ÔÏóʱ£¬Èç¹û²»Óÿ¼ÂÇÕâЩÏß³ÌÔÚÔËÐÐʱ»·¾³Ïµĵ÷¶ÈºÍ½»»»Ö´ÐУ¬Ò²²»ÐèÒª½øÐжîÍâµÄͬ²½£¬»òÕßµ÷Ó÷½½øÐÐÈÎºÎÆäËûµÄе÷²Ù×÷£¬µ÷ÓÃÕâ¸ö¶ÔÏóµÄÐÐΪ¶¼¿ÉÒÔ»ñµÃÕýÈ·µÄ½á¹û£¬ÄÇÕâ¸ö¶ÔÏó¾ÍÊÇḬ̈߳²È«µÄ¡£
²»¿É±ä£ºÖ»ÒªÒ»¸ö²»¿É±äµÄ¶ÔÏó±»ÕýÈ·µØ¹¹½¨³öÀ´¡£Ê¹ÓÃfinal¹Ø¼ü×ÖÐÞÊεĻù±¾Êý¾ÝÀàÐÍ£»Èç¹û¹²ÏíÊý¾ÝÊÇÒ»¸ö¶ÔÏó£¬ÄǾÍÐèÒª±£Ö¤¶ÔÏóµÄÐÐΪ²»»á¶ÔÆä״̬²úÉúÈκÎÓ°Ïì(StringÀàµÄ¶ÔÏó)¡£·½·¨£º°Ñ¶ÔÏóÖдøÓÐ״̬µÄ±äÁ¿¶¼ÉêÃ÷Ϊfinal£¬ÈçIntegerÀà¡£ÓУºÃ¶¾ÙÀàÐÍ¡¢NumberµÄ²¿·Ö×ÓÀà(AtomicIntegerºÍAtomicLong³ýÍâ)¡£
¾ø¶ÔḬ̈߳²È«£º
Ïà¶ÔḬ̈߳²È«£º¶ÔÕâ¸ö¶ÔÏóµ¥¶ÀµÄ²Ù×÷ÊÇḬ̈߳²È«µÄ¡£Ò»°ãÒâÒåÉϵÄḬ̈߳²È«¡£
Ï̼߳æÈÝ£ºÐèҪͨ¹ýµ÷ÓöËÕýÈ·µØÊ¹ÓÃͬ²½ÊÖ¶ÎÀ´±£Ö¤¶ÔÏóÔÚ²¢·¢»·¾³Öа²È«µØÊ¹Óá£
Ï̶߳ÔÁ¢£º²»¹Üµ÷ÓöËÊÇ·ñ²ÉÈ¡ÁËͬ²½´ëÊ©£¬¶¼ÎÞ·¨ÔÚ¶àÏ̻߳·¾³Öв¢·¢Ê¹ÓõĴúÂë¡£ÓУºSystem.setIn()¡¢System.setOut()¡¢System.runFinalizersOnExit()
10. Ḭ̈߳²È«µÄʵÏÖ·½·¨
1.1. »¥³âͬ²½£º
ͬ²½ÊÇÖ¸ÔÚ¶à¸öÏ̲߳¢·¢·ÃÎʹ²ÏíÊý¾Ýʱ£¬±£Ö¤¹²ÏíÊý¾ÝÔÚͬһ¸öʱ¿ÌÖ»±»Ò»ÌõÏß³ÌʹÓ᣻¥³â·½Ê½£ºÁÙ½çÇø¡¢»¥³âÁ¿ºÍÐźÅÁ¿¡£
Synchronized¹Ø¼ü×Ö£º±àÒëºó»áÔÚͬ²½¿éǰºó·Ö±ðÐγÉmonitorenterºÍmonitorexitÕâÁ½¸ö×Ö½ÚÂëÖ¸Áî¡£ÕâÁ½¸öÖ¸Áî¶¼ÐèÒªÒ»¸öÒýÓÃÀàÐ͵IJÎÊýÀ´Ö¸Ã÷ÒªËø¶¨ºÍ½âËøµÄ¶ÔÏó¡£Èç¹ûûÓÐÃ÷È·Ö¸¶¨¶ÔÏó²ÎÊý£¬ÄǾ͸ù¾ÝsynchronizedÐÞÊεÄÊÇʵÀý·½·¨»¹ÊÇÀà·½·¨£¬È¥È¡¶ÔÓ¦µÄ¶ÔÏóʵÀý»òClass¶ÔÏóÀ´×÷ÎªËø¶ÔÏó¡£
ÔÚÖ´ÐÐmonitorenterÖ¸Áîʱ£¬Ê×Ïȳ¢ÊÔ»ñÈ¡¶ÔÏóµÄËø£¬Èç¹ûûÓб»Ëø¶¨»òÕßµ±Ç°Ïß³ÌÒѾӵÓÐÁ˸öÔÏóµÄËø£¬Ôò½«Ëø¼ÆÊýÆ÷¼Ó1£¬ÏàÓ¦µÄÖ´ÐÐmoniterexitʱ£¬½«Ëø¼ÆÊýÆ÷¼õ1£¬µ±¼ÆÊýÆ÷Ϊ0ʱ£¬Ëø¾Í±»ÊÍ·ÅÁË¡£Èç¹û»ñÈ¡¶ÔÏóËøÊ§°Ü£¬Ôòµ±Ç°Ï߳̾ÍÒª×èÈûµÈ´ý¡£
ReentrantLockÏà¶ÔsynchronizedµÄ¸ß¼¶¹¦ÄÜ£º
µÈ´ý¿ÉÖжϣºµ±³ÖÓÐËøµÄÏ̳߳¤ÆÚ²»ÊÍ·ÅËøÊ±£¬ÕýÔڵȴýµÄÏ߳̿ÉÒÔÑ¡Ôñ·ÅÆúµÈ´ý£¬¸ÄΪ´¦ÀíÆäËûÊÂÇé¡£
¹«Æ½Ëø£º¶à¸öÏß³ÌÔڵȴýͬһ¸öËøÊ±£¬±ØÐë°´ÕÕÉêÇëËøµÄʼþ˳ÐòÀ´Ò»´Î»ñÈ¡Ëø£»¶ø·Ç¹«Æ½ËøÔÚ±»ÊÍ·Åʱ£¬ÈκÎÒ»¸öµÈ´ýËøµÄÏ̶߳¼Óлú»á»ñµÃËø¡£SynchronizedÖеÄËøÊǷǹ«Æ½Ëø£¬ReentrantLockĬÈÏÒ²ÊǷǹ«Æ½Ëø¡£
Ëø°ó¶¨¶à¸öÌõ¼þ£ºÒ»¸öReentrantLock¶ÔÏó¿ÉÒÔͬʱ°ó¶¨¶à¸öCondition¶ÔÏó¡£
1.2. ·Ç×èÈûͬ²½£º
»ùÓÚ³åÍ»¼ì²âµÄÀÖ¹Û²¢·¢²ßÂÔ£ºÏȽøÐвÙ×÷£¬Èç¹ûûÓÐÆäËûÏß³ÌÕùÓù²ÏíÊý¾Ý£¬ÄDzÙ×÷¾Í³É¹¦ÁË£»Èç¹û¹²ÏíÊý¾ÝÓÐÕùÓ㬲úÉúÁ˳åÍ»£¬ÄǾÍÔÙ½øÐÐÆäËûµÄ²¹³¥´ëÊ©(Ò»°ãÊDz»¶ÏµÄ³¢ÊÔ£¬Ö±µ½³É¹¦ÎªÖ¹)¡£
AtomicIntegerµÈÔ×ÓÀàÖÐÌṩÁË·½·¨ÊµÏÖÁËCASÖ¸Áî¡£
1.3. ÎÞͬ²½·½°¸£º
¿ÉÖØÈë´úÂ룺¿ÉÒÔÔÚ´úÂëÖ´ÐеÄÈκÎʱ¿ÌÖжÏËü£¬×ª¶øÈ¥Ö´ÐÐÁíÒ»¶Î´úÂ룬¶øÔÚ¿ØÖÆÈ¨·µ»Øºó£¬ÔÀ´µÄ³ÌÐò²»»á³öÏÖÈκδíÎó¡£ÌØÕ÷£º²»ÒÀÀµ´æ´¢ÔÚ¶ÑÉϵÄÊý¾ÝºÍ¹«ÓõÄϵͳ×ÊÔ´¡¢Óõ½µÄ״̬Á¿¶¼ÓɲÎÊý´«È룬²»µ÷Ó÷ǿÉÖØÈëµÄ·½·¨µÈ¡£Èç¹ûÒ»¸ö·½·¨£¬ËüµÄ·µ»Ø½á¹ûÊÇ¿ÉÒÔÔ¤²âµÄ£¬Ö»Òª³öÈëÁËÏàͬµÄÊý¾Ý£¬¾ÍÄÜ·µ»ØÏàͬµÄ½á¹û£¬ÄÇËü¾ÍÂú×ã¿ÉÖØÈëÐÔµÄÒªÇó¡£
Ï̱߳¾µØ´æ´¢£ºÈç¹ûÒ»¶Î´úÂëÖÐËùÐèÒªµÄÊý¾Ý±ØÐëÓëÆäËü´úÂë¹²Ïí£¬ÄǾͿ´¿´ÕâЩ¹²ÏíÊý¾ÝµÄ´úÂëÊÇ·ñÄܱ£Ö¤ÔÚͬһ¸öÏß³ÌÖÐÖ´ÐС£
A. ThreadLocalÀà
ThreadLocal£ºÏ̼߳¶±ðµÄ¾Ö²¿±äÁ¿£¬ÎªÃ¿¸öʹÓøñäÁ¿µÄÏß³ÌÌṩһ¸ö¶ÀÁ¢µÄ±äÁ¿¸±±¾£¬Ã¿¸öÏß³ÌÐ޸ĸ±±¾Ê±²»Ó°ÏìÆäËûÏ̶߳ÔÏóµÄ¸±±¾¡£ThreadLocalʵÀýͨ³£×÷Ϊ¾²Ì¬Ë½ÓÐ×ֶγöÏÖÔÚÒ»¸öÀàÖС£
11. ËøÓÅ»¯
1.1. ×ÔÐýËø
ΪÁËÈÃÏ̵߳ȴý£¬ÈÃÏß³ÌÖ´ÐÐÒ»¸öæѻ·(×ÔÐý)¡£ÐèÒªÎïÀí»úÆ÷ÓÐÒ»¸öÒÔÉϵĴ¦ÀíÆ÷¡£×ÔÐýµÈ´ýËäÈ»±ÜÃâÁËÏß³ÌÇл»µÄ¿ªÏú£¬´øËüÊÇÒªÕ¼Óô¦ÀíÆ÷ʱ¼äµÄ£¬ËùÒÔÈç¹ûËø±»Õ¼ÓõÄʱ¼äºÜ¶Ì£¬×ÔÐýµÈ´ýµÄЧ¹û¾Í»á·Ç³£ºÃ£¬·´Ö®×ÔÐýµÄÏß³ÌÖ»»á°×°×ÏûºÄ´¦ÀíÆ÷×ÊÔ´¡£×ÔÐý´ÎÊýµÄĬÈÏÖµÊÇ10´Î£¬¿ÉÒÔʹÓòÎÊý-XX:PreBlockSpinÀ´¸ü¸Ä¡£
×ÔÊÊÓ¦×ÔÐýËø£º×ÔÐýµÄʱ¼ä²»Ôٹ̶¨£¬¶øÊÇÓÉǰһ´ÎÔÚͬһ¸öËøÉϵÄ×ÔÐýʱ¼ä¼°ËøµÄÓµÓÐÕßµÄ״̬À´¾ö¶¨¡£
1.2. ËøÇå³ý
Ö¸ÐéÄâ»ú¼´Ê±±àÒëÆ÷ÔÚÔËÐÐʱ£¬¶ÔһЩ´úÂëÉÏÒªÇóͬ²½£¬µ«ÊDZ»¼ì²âµ½²»¿ÉÄÜ´æÔÚ¹²ÏíÊý¾Ý¾ºÕùµÄËø½øÐÐÇå³ý(ÌÓÒÝ·ÖÎö¼¼Êõ£ºÔÚ¶ÑÉϵÄËùÓÐÊý¾Ý¶¼²»»áÌÓÒݳöÈ¥±»ÆäËüÏ̷߳ÃÎʵ½£¬¿ÉÒÔ°ÑËüÃǵ±³ÉÕ»ÉÏÊý¾Ý¶Ô´ý)¡£
1.3. Ëø´Ö»¯
Èç¹ûÐéÄâ»ú̽²âµ½ÓÐÒ»´®ÁãËéµÄ²Ù×÷¶¼¶Ôͬһ¸ö¶ÔÏó¼ÓËø£¬½«»á°Ñ¼ÓËøÍ¬²½µÄ·¶Î§À©Õ¹µ½Õû¸ö²Ù×÷ÐòÁеÄÍⲿ¡£
HotSpotÐéÄâ»úµÄ¶ÔÏóµÄÄÚ´æ²¼¾Ö£º¶ÔÏóÍ·(Object Header)·ÖΪÁ½²¿·ÖÐÅÏ¢Â𣬵ÚÒ»²¿·Ö(Mark
Word)ÓÃÓÚ´æ´¢¶ÔÏó×ÔÉíµÄÔËÐÐʱÊý¾Ý£¬ÁíÒ»¸ö²¿·ÖÓÃÓÚ´æ´¢Ö¸Ïò·½·¨Çø¶ÔÏóÊý¾ÝÀàÐ͵ÄÖ¸Õ룬Èç¹ûÊÇÊý×éµÄ»°£¬»¹»áÓÉÒ»¸ö¶îÍâµÄ²¿·ÖÓÃÓÚ´æ´¢Êý×éµÄ³¤¶È¡£
32λHotSpotÐéÄâ»úÖжÔÏóδ±»Ëø¶¨µÄ״̬Ï£¬Mark WordµÄ32¸öBits¿Õ¼äÖÐ25λÓÃÓÚ´æ´¢¶ÔÏó¹þÏ£Â룬4λ´æ´¢¶ÔÏó·Ö´úÄêÁ䣬2λ´æ´¢Ëø±ê־룬1λ¹Ì¶¨Îª0¡£
HotSpotÐéÄâ»ú¶ÔÏóÍ·Mark Word

1.4. ÇáÁ¿¼¶Ëø
ÔÚ´úÂë½øÈëͬ²½¿éʱ£¬Èç¹û´Ëͬ²½¶ÔÏóûÓб»Ëø¶¨£¬ÐéÄâ»úÊ×ÏȽ«ÔÚµ±Ç°Ï̵߳ÄÕ»Ö¡Öн¨Á¢Ò»¸öÃûÎªËø¼Ç¼(Lock
Record)µÄ¿Õ¼ä£¬ÓÃÓÚ´æ´¢Ëù¶ÔÏóĿǰµÄMark WordµÄ¿½±´¡£È»ºóÐéÄâ»ú½«Ê¹ÓÃCAS²Ù×÷³¢ÊÔ½«¶ÔÏóµÄMark
Word¸üÐÂΪִÐÐLock RecordµÄÖ¸Õë¡£Èç¹û³É¹¦£¬ÄÇôÕâ¸öÏ߳̾ÍÓµÓÐÁ˸öÔÏóµÄËø¡£Èç¹û¸üвÙ×÷ʧ°Ü£¬ÐéÄâ»úÊ×ÏÈ»á¼ì²é¶ÔÏóµÄMark
WordÊÇ·ñÖ¸Ïòµ±Ç°Ï̵߳ÄÕ»Ö¡£¬Èç¹ûÊǾÍ˵Ã÷µ±Ç°Ïß³ÌÒѾӵÓÐÁËÕâ¸ö¶ÔÏóµÄËø£¬·ñÔò˵Ã÷Õâ¸ö¶ÔÏóÒѾ±»ÆäËüÏß³ÌÇÀÕ¼¡£Èç¹ûÓÐÁ½ÌõÒÔÉϵÄÏß³ÌÕùÓÃͬһ¸öËø£¬ÄÇÇáÁ¿¼¶Ëø¾Í²»ÔÙÓÐЧ£¬ÒªÅòÕÍÎªÖØÁ¿¼¶Ëø¡£
½âËø¹ý³Ì£ºÈç¹û¶ÔÏóµÄMark WordÈÔȻָÏò×ÅÏ̵߳ÄËø¼Ç¼£¬ÄǾÍÓÃCAS²Ù×÷°Ñ¶ÔÏóµ±Ç°µÄMark WordºÍºÍÏß³ÌÖи´ÖƵÄDisplaced
Mark WordÌæ»»»ØÀ´£¬Èç¹ûÌæ»»³É¹¦£¬Õû¸ö¹ý³Ì¾ÍÍê³É¡£Èç¹ûʧ°Ü£¬ËµÃ÷ÓÐÆäËûÏ̳߳¢ÊÔ¹ý»ñÈ¡¸ÃËø£¬ÄǾÍÒªÔÚÊÍ·ÅËøµÄͬʱ£¬»½Ðѱ»¹ÒÆðµÄÏ̡߳£
ÇáÁ¿¼¶ËøµÄÒÀ¾Ý£º¶ÔÓÚ¾ø´ó²¿·ÖµÄËø£¬ÔÚÕû¸öͬ²½ÖÜÆÚÄÚ¶¼ÊDz»´æÔÚ¾ºÕùµÄ¡£
´«Í³Ëø(ÖØÁ¿¼¶Ëø)ʹÓòÙ×÷ϵͳ»¥³âÁ¿À´ÊµÏֵġ£
1.5. Æ«ÏòËø
Ä¿µÄÊÇÏû³ýÔÚÎÞ¾ºÕùÇé¿öϵÄͬ²½ÔÓ½øÒ»²½Ìá¸ß³ÌÐòµÄÔËÐÐÐÔÄÜ¡£Ëø»áÆ«ÏòµÚÒ»¸ö»ñµÃËüµÄỊ̈߳¬Èç¹ûÔÚ½ÓÏÂÀ´µÄÖ´Ðйý³ÌÖУ¬¸ÃËøÃ»Óб»ÆäËüÏ̻߳ñÈ¡£¬Ôò³ÖÓÐËøµÄÏ߳̽«ÓÀÔ¶²»ÐèÒªÔÙ½øÐÐͬ²½¡£
µ±ËøµÚÒ»´Î±»Ï̻߳ñÈ¡µÄʱºò£¬ÐéÄâ»ú½«»á°Ñ¶ÔÏóÍ·Öеıê־λÉèΪ01£¬Í¬Ê±Ê¹ÓÃCAS²Ù×÷°Ñ»ñÈ¡µ½Õâ¸öËøµÄÏ̵߳ÄID¼Ç¼ÔÚ¶ÔÏóµÄMark
WordÖ®ÖУ¬Èç¹û³É¹¦£¬³ÖÓÐÆ«ÏòËøµÄÏß³ÌÒÔºóÿ´Î½øÈëÕâ¸öËøÏà¹ØµÄͬ²½¿éʱ£¬¶¼¿ÉÒÔ²»½øÐÐÈκÎͬ²½²Ù×÷¡£
µ±ÓÐÁíÒ»¸öÏß³ÌÈ¥³¢ÊÔ»ñÈ¡Õâ¸öËøÊ±£¬Æ«Ïòģʽ¾ÍÐû¸æ½áÊø¡£¸ù¾ÝËù¶ÔÏóĿǰÊÇ·ñ´¦ÓÚ±»Ëø¶¨µÄ״̬£¬³·ÏúÆ«Ïòºó»Ö¸´µ½Î´Ëø¶¨»òÇáÁ¿¼¶Ëø¶¨×´Ì¬¡£
12. ÄÚºË̬ºÍÓû§Ì¬
²Ù×÷ϵͳµÄÁ½ÖÖÔËÐм¶±ð£¬intel cpuÌṩ-Ring3ÈýÖÖÔËÐÐģʽ¡£
Ring0ÊÇÁô¸ø²Ù×÷ϵͳ´úÂ룬É豸Çý¶¯³ÌÐò´úÂëʹÓõģ¬ËüÃǹ¤×÷ÓÚϵͳºËÐÄ̬£»¶øRing3Ôò¸øÆÕͨµÄÓû§³ÌÐòʹÓã¬ËüÃǹ¤×÷ÔÚÓû§Ì¬¡£ÔËÐÐÓÚ´¦ÀíÆ÷ºËÐÄ̬µÄ´úÂë²»ÊÜÈκεÄÏÞÖÆ£¬¿ÉÒÔ×ÔÓɵطÃÎÊÈκÎÓÐЧµØÖ·£¬½øÐÐÖ±½Ó¶Ë¿Ú·ÃÎÊ¡£¶øÔËÐÐÓÚÓû§Ì¬µÄ´úÂëÔòÒªÊܵ½´¦ÀíÆ÷µÄÖî¶à¼ì²é£¬ËüÃÇÖ»ÄÜ·ÃÎÊÓ³ÉäÆäµØÖ·¿Õ¼äµÄÒ³±íÏîÖй涨µÄÔÚÓû§Ì¬Ï¿ɷÃÎÊÒ³ÃæµÄÐéÄâµØÖ·£¬ÇÒÖ»ÄܶÔÈÎÎñ״̬¶Î£¨TSS£©ÖÐI/OÐí¿Éλͼ£¨I/O
Permission Bitmap£©Öй涨µÄ¿É·ÃÎʶ˿ڽøÐÐÖ±½Ó·ÃÎÊ¡£
13. ³£Ó÷½·¨
1.1. object.wait()£º
ÔÚÆäËûÏ̵߳÷Óô˶ÔÏóµÄnotify()»òÕßnotifyAll()·½·¨£¬»ò³¬¹ýÖ¸¶¨Ê±¼äÁ¿Ç°£¬µ±Ç°Ïß³ÌTµÈ´ý(Ïß³ÌT±ØÐëÓµÓиöÔÏóµÄËø)¡£Ïß³ÌT±»·ÅÖÃÔڸöÔÏóµÄÐÝÏ¢ÇøÖУ¬²¢ÊÍ·ÅËø¡£ÔÚ±»»½ÐÑ¡¢Öжϡ¢³¬Ê±µÄÇé¿öÏ£¬´Ó¶ÔÏóµÄÐÝÏ¢ÇøÖÐɾ³ýÏß³ÌT£¬²¢ÖØÐ½øÐÐÏ̵߳÷¶È¡£Ò»µ©Ïß³ÌT»ñµÃ¸Ã¶ÔÏóµÄËø£¬¸Ã¶ÔÏóÉϵÄËùÓÐͬ²½ÉêÃ÷¶¼±»»Ö¸´µ½µ÷ÓÃwait()·½·¨Ê±µÄ״̬£¬È»ºóÏß³ÌT´Ówait()·½·¨·µ»Ø¡£Èç¹ûµ±Ç°Ïß³ÌÔڵȴý֮ǰ»òÔڵȴýʱ±»ÈκÎÏß³ÌÖжϣ¬Ôò»áÅ׳ö
InterruptedException¡£ÔÚ°´ÉÏÊöÐÎʽ»Ö¸´´Ë¶ÔÏóµÄËø¶¨×´Ì¬Ê±²Å»áÅ׳ö´ËÒì³£¡£ÔÚÅ׳ö´ËÒ쳣ʱ£¬µ±Ç°Ï̵߳ÄÖжÏ״̬±»Çå³ý¡£
Ö»ÓиöÔÏóµÄËø±»ÊÍ·Å£¬²¢²»»áÊͷŵ±Ç°Ï̳߳ÖÓÐµÄÆäËûͬ²½×ÊÔ´¡£
1.2. object.notify()
»½ÐÑÔڴ˶ÔÏóËøÉϵȴýµÄµ¥¸öÏ̡߳£´Ë·½·¨Ö»ÄÜÓÉÓµÓиöÔÏóËøµÄÏß³ÌÀ´µ÷Óá£
1.3. Thread.sleep()
ÔÚÖ¸¶¨µÄºÁÃëÊýÄÚÈõ±Ç°ÕýÔÚÖ´ÐеÄÏß³ÌÐÝÃߣ¨ÔÝÍ£Ö´ÐУ©£¬´Ë²Ù×÷Êܵ½ÏµÍ³¼ÆÊ±Æ÷ºÍµ÷¶È³ÌÐò¾«¶ÈºÍ׼ȷÐÔµÄÓ°Ïì¡£¼à¿Ø×´Ì¬ÒÀÈ»±£³Ö¡¢»á×Ô¶¯»Ö¸´µ½¿ÉÔËÐÐ״̬£¬²»»áÊͷŶÔÏóËø¡£Èç¹ûÈκÎÏß³ÌÖжÏÁ˵±Ç°Ï̡߳£µ±Å׳öInterruptedExceptionÒ쳣ʱ£¬µ±Ç°Ï̵߳ÄÖжÏ״̬±»Çå³ý¡£ÈóöCPU·ÖÅäµÄÖ´ÐÐʱ¼ä¡£
thread.join()£ºÔÚÒ»¸öÏ̶߳ÔÏóÉϵ÷Óã¬Ê¹µ±Ç°Ï̵߳ȴýÕâ¸öÏ̶߳ÔÏó¶ÔÓ¦µÄÏ߳̽áÊø¡£
Thread.yield()£ºÔÝÍ£µ±Ç°ÕýÔÚÖ´ÐеÄÏ̶߳ÔÏ󣬲¢Ö´ÐÐÆäËûÏ̡߳£
thread.interrupt()
ÖжÏỊ̈߳¬Í£Ö¹ÆäÕýÔÚ½øÐеÄÒ»ÇС£ÖжÏÒ»¸ö²»´¦Óڻ״̬µÄÏ̲߳»»áÓÐÈκÎ×÷Óá£
Èç¹ûÏß³ÌÔÚµ÷ÓÃObjectÀàµÄwait()·½·¨¡¢»òÕßjoin()¡¢sleep()·½·¨¹ý³ÌÖÐÊÜ×裬ÔòÆäÖжÏ״̬½«±»Çå³ý£¬²¢ÊÕµ½Ò»¸öInterruptedException¡£
Thread.interrupted()£º¼ì²âµ±Ç°Ïß³ÌÊÇ·ñÒѾÖжϣ¬²¢ÇÒÇå³ýÏ̵߳ÄÖжÏ״̬(»Øµ½·ÇÖжÏ״̬)¡£
thread.isAlive()£ºÈç¹ûÏß³ÌÒѾÆô¶¯ÇÒÉÐδÖÕÖ¹£¬ÔòΪ»î¶¯×´Ì¬¡£
thread.setDaemon()£ºÐèÒªÔÚstart()·½·¨µ÷ÓÃ֮ǰµ÷Óᣵ±ÕýÔÚÔËÐеÄÏ̶߳¼ÊǺǫ́Ïß³Ìʱ£¬JavaÐéÄâ»ú½«Í˳ö¡£·ñÔòµ±Ö÷Ïß³ÌÍ˳öʱ£¬ÆäËûÏß³ÌÈÔÈ»»á¼ÌÐøÖ´ÐС£
14. ÆäËû
1.µ±µ÷ÓÃObjectµÄwait()¡¢notify()¡¢notifyAll()ʱ£¬Èç¹ûµ±Ç°Ïß³ÌûÓлñµÃ¸Ã¶ÔÏóËø£¬Ôò»áÅ׳öIllegalMonitorStateExceptionÒì³£¡£
2.Èç¹ûÒ»¸ö·½·¨ÉêÃ÷Ϊsynchronized£¬ÔòµÈͬÓÚÔÚÕâ¸ö·½·¨Éϵ÷ÓÃsynchronized(this)¡£
Èç¹ûÒ»¸ö¾²Ì¬·½·¨±»ÉêÃ÷Ϊsynchronized£¬ÔòµÈͬÓÚÔÚÕâ¸ö·½·¨Éϵ÷ÓÃsynchronized(Àà.class)¡£µ±Ò»¸öÏ߳̽øÈëͬ²½¾²Ì¬·½·¨ÖÐʱ£¬ÆäËûÏ̲߳»ÄܽøÈëÕâ¸öÀàµÄÈκξ²Ì¬Í¬²½·½·¨¡£
3.Ï̳߳ÉΪ¶ÔÏóËøµÄÓµÓÐÕߣº
1£©.ͨ¹ýÖ´Ðд˶ÔÏóµÄͬ²½ÊµÀý·½·¨
2£©.ͨ¹ýÖ´ÐÐÔڴ˶ÔÏóÉϽøÐÐͬ²½µÄsynchronizedÓï¾äµÄÕýÎÄ
3£©.¶ÔÓÚClassÀàÐ͵ĶÔÏ󣬿ÉÒÔͨ¹ýÖ´ÐиÃÀàµÄͬ²½¾²Ì¬·½·¨¡£
4.ËÀËø£º
ËÀËø¾ÍÊÇÁ½¸ö»òÁ½¸öÒÔÉϵÄÏ̱߳»ÎÞÏÞµÄ×èÈû£¬Ïß³ÌÖ®¼äÏ໥µÈ´ýËùÐè×ÊÔ´¡£
¿ÉÄÜ·¢ÉúÔÚÒÔÏÂÇé¿ö£º
1£©µ±Á½¸öÏß³ÌÏ໥µ÷ÓÃThread.join()£»
2£©µ±Á½¸öÏß³ÌʹÓÃǶÌ×µÄͬ²½¿é£¬Ò»¸öÏß³ÌÕ¼ÓÃÁËÁíÍâÒ»¸öÏ̱߳ØÐëµÄËø£¬»¥ÏàµÈ´ýʱ±»×èÈû¾ÍÓпÉÄܳöÏÖËÀËø¡£
5.µ÷ÓÃÁËThreadÀàµÄstart()·½·¨(ÏòCPUÉêÇëÁíÒ»¸öÏ߳̿ռäÀ´Ö´ÐÐrun()·½·¨ÀïµÄ´úÂë)£¬Ï̵߳Ärun()·½·¨²»Ò»¶¨Á¢¼´Ö´ÐУ¬¶øÊÇÒªµÈ´ýJVM½øÐе÷¶È¡£
run()·½·¨Öаüº¬µÄÊÇÏ̵߳ÄÖ÷Ì壬Ҳ¾ÍÊÇÕâ¸öÏ̱߳»Æô¶¯ºó½«ÒªÔËÐеĴúÂë¡£
|