Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓƵ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
40¸öJava¶àÏß³ÌÎÊÌâ×ܽá
 
×÷ÕߣºÇçÃ÷ À´Ô´£º²©¿Í ·¢²¼ÓÚ 2017-1-18
  2550  次浏览      20
 

Ç°ÑÔ

ÕâƪÎÄÕÂÖ÷ÒªÊǶԶàÏ̵߳ÄÎÊÌâ½øÐÐ×ܽáµÄ£¬Òò´ËÂÞÁÐÁË40¸ö¶àÏ̵߳ÄÎÊÌâ¡£ÕâЩ¶àÏ̵߳ÄÎÊÌ⣬ÓÐЩÀ´Ô´ÓÚ¸÷´óÍøÕ¾¡¢ÓÐЩÀ´Ô´ÓÚ×Ô¼ºµÄ˼¿¼¡£¿ÉÄÜÓÐЩÎÊÌâÍøÉÏÓС¢¿ÉÄÜÓÐЩÎÊÌâ¶ÔÓ¦µÄ´ð°¸Ò²ÓС¢Ò²¿ÉÄÜÓÐЩ¸÷λÍøÓÑÒ²¶¼¿´¹ý£¬µ«ÊDZ¾ÎÄд×÷µÄÖØÐľÍÊÇËùÓеÄÎÊÌⶼ»á°´ÕÕ×Ô¼ºµÄÀí½â»Ø´ðÒ»±é£¬²»»áÈ¥¿´ÍøÉϵĴ𰸣¬Òò´Ë¿ÉÄÜÓÐЩÎÊÌâ½²µÄ²»¶Ô£¬ÄÜÖ¸ÕýµÄÏ£Íû´ó¼Ò²»ÁßÖ¸½Ì¡£

40¸öÎÊÌâ»ã×Ü

1¡¢¶àÏß³ÌÓÐʲôÓã¿

Ò»¸ö¿ÉÄÜÔںܶàÈË¿´À´ºÜ³¶µ­µÄÒ»¸öÎÊÌ⣺ÎÒ»áÓöàÏ߳̾ͺÃÁË£¬»¹¹ÜËüÓÐʲôÓã¿ÔÚÎÒ¿´À´£¬Õâ¸ö»Ø´ð¸ü³¶µ­¡£Ëùν¡±ÖªÆäȻ֪ÆäËùÒÔÈ»¡±£¬¡±»áÓá±Ö»ÊÇ¡±ÖªÆäÈ»¡±£¬¡±ÎªÊ²Ã´Óá±²ÅÊÇ¡±ÖªÆäËùÒÔÈ»¡±£¬Ö»Óдﵽ¡±ÖªÆäȻ֪ÆäËùÒÔÈ»¡±µÄ³Ì¶È²Å¿ÉÒÔ˵ÊÇ°ÑÒ»¸ö֪ʶµãÔËÓÃ×ÔÈç¡£OK£¬ÏÂÃæ˵˵ÎÒ¶ÔÕâ¸öÎÊÌâµÄ¿´·¨£º

£¨1£©·¢»Ó¶àºËCPUµÄÓÅÊÆ

Ëæ׏¤ÒµµÄ½ø²½£¬ÏÖÔڵıʼDZ¾¡¢Ì¨Ê½»úÄËÖÁÉÌÓõÄÓ¦Ó÷þÎñÆ÷ÖÁÉÙÒ²¶¼ÊÇË«ºËµÄ£¬4ºË¡¢8ºËÉõÖÁ16ºËµÄÒ²¶¼²»ÉÙ¼û£¬Èç¹ûÊǵ¥Ï̵߳ijÌÐò£¬ÄÇôÔÚË«ºËCPUÉϾÍÀË·ÑÁË50%£¬ÔÚ4ºËCPUÉϾÍÀË·ÑÁË75%¡£µ¥ºËCPUÉÏËùνµÄ¡±¶àÏ̡߳±ÄÇÊǼٵĶàỊ̈߳¬Í¬Ò»Ê±¼ä´¦ÀíÆ÷Ö»»á´¦ÀíÒ»¶ÎÂß¼­£¬Ö»²»¹ýÏß³ÌÖ®¼äÇл»µÃ±È½Ï¿ì£¬¿´×ÅÏñ¶à¸öÏ̡߳±Í¬Ê±¡±ÔËÐаÕÁË¡£¶àºËCPUÉϵĶàÏ̲߳ÅÊÇÕæÕýµÄ¶àỊ̈߳¬ËüÄÜÈÃÄãµÄ¶à¶ÎÂß¼­Í¬Ê±¹¤×÷£¬¶àỊ̈߳¬¿ÉÒÔÕæÕý·¢»Ó³ö¶àºËCPUµÄÓÅÊÆÀ´£¬´ïµ½³ä·ÖÀûÓÃCPUµÄÄ¿µÄ¡£

£¨2£©·ÀÖ¹×èÈû

´Ó³ÌÐòÔËÐÐЧÂʵĽǶÈÀ´¿´£¬µ¥ºËCPU²»µ«²»»á·¢»Ó³ö¶àÏ̵߳ÄÓÅÊÆ£¬·´¶ø»áÒòΪÔÚµ¥ºËCPUÉÏÔËÐжàÏ̵߳¼ÖÂÏß³ÌÉÏÏÂÎĵÄÇл»£¬¶ø½µµÍ³ÌÐòÕûÌåµÄЧÂÊ¡£µ«Êǵ¥ºËCPUÎÒÃÇ»¹ÊÇÒªÓ¦ÓöàỊ̈߳¬¾ÍÊÇΪÁË·ÀÖ¹×èÈû¡£ÊÔÏ룬Èç¹ûµ¥ºËCPUʹÓõ¥Ị̈߳¬ÄÇôֻҪÕâ¸öÏß³Ì×èÈûÁË£¬±È·½ËµÔ¶³Ì¶Áȡij¸öÊý¾Ý°É£¬¶Ô¶Ë³Ù³Ùδ·µ»ØÓÖûÓÐÉèÖó¬Ê±Ê±¼ä£¬ÄÇôÄãµÄÕû¸ö³ÌÐòÔÚÊý¾Ý·µ»Ø»ØÀ´Ö®Ç°¾ÍÍ£Ö¹ÔËÐÐÁË¡£¶àÏ߳̿ÉÒÔ·ÀÖ¹Õâ¸öÎÊÌ⣬¶àÌõÏß³ÌͬʱÔËÐУ¬ÄÄÅÂÒ»ÌõÏ̵߳ĴúÂëÖ´ÐжÁÈ¡Êý¾Ý×èÈû£¬Ò²²»»áÓ°ÏìÆäËüÈÎÎñµÄÖ´ÐС£

£¨3£©±ãÓÚ½¨Ä£

ÕâÊÇÁíÍâÒ»¸öûÓÐÕâôÃ÷ÏÔµÄÓŵãÁË¡£¼ÙÉèÓÐÒ»¸ö´óµÄÈÎÎñA£¬µ¥Ï̱߳à³Ì£¬ÄÇô¾ÍÒª¿¼ÂǺܶ࣬½¨Á¢Õû¸ö³ÌÐòÄ£ÐͱȽÏÂé·³¡£µ«ÊÇÈç¹û°ÑÕâ¸ö´óµÄÈÎÎñA·Ö½â³É¼¸¸öСÈÎÎñ£¬ÈÎÎñB¡¢ÈÎÎñC¡¢ÈÎÎñD£¬·Ö±ð½¨Á¢³ÌÐòÄ£ÐÍ£¬²¢Í¨¹ý¶àÏ̷ֱ߳ðÔËÐÐÕ⼸¸öÈÎÎñ£¬ÄǾͼòµ¥ºÜ¶àÁË¡£

2¡¢´´½¨Ï̵߳ķ½Ê½

±È½Ï³£¼ûµÄÒ»¸öÎÊÌâÁË£¬Ò»°ã¾ÍÊÇÁ½ÖÖ£º

£¨1£©¼Ì³ÐThreadÀà

£¨2£©ÊµÏÖRunnable½Ó¿Ú

ÖÁÓÚÄĸöºÃ£¬²»ÓÃ˵¿Ï¶¨ÊǺóÕߺã¬ÒòΪʵÏֽӿڵķ½Ê½±È¼Ì³ÐÀàµÄ·½Ê½¸üÁé»î£¬Ò²ÄܼõÉÙ³ÌÐòÖ®¼äµÄñîºÏ¶È£¬ÃæÏò½Ó¿Ú±à³ÌÒ²ÊÇÉè¼Æģʽ6´óÔ­ÔòµÄºËÐÄ¡£

3¡¢start()·½·¨ºÍrun()·½·¨µÄÇø±ð

Ö»Óе÷ÓÃÁËstart()·½·¨£¬²Å»á±íÏÖ³ö¶àÏ̵߳ÄÌØÐÔ£¬²»Í¬Ï̵߳Ärun()·½·¨ÀïÃæµÄ´úÂë½»ÌæÖ´ÐС£Èç¹ûÖ»Êǵ÷ÓÃrun()·½·¨£¬ÄÇô´úÂ뻹ÊÇͬ²½Ö´Ðеģ¬±ØÐëµÈ´ýÒ»¸öÏ̵߳Ärun()·½·¨ÀïÃæµÄ´úÂëÈ«²¿Ö´ÐÐÍê±ÏÖ®ºó£¬ÁíÍâÒ»¸öÏ̲߳ſÉÒÔÖ´ÐÐÆärun()·½·¨ÀïÃæµÄ´úÂë¡£

4¡¢Runnable½Ó¿ÚºÍCallable½Ó¿ÚµÄÇø±ð

ÓеãÉîµÄÎÊÌâÁË£¬Ò²¿´³öÒ»¸öJava³ÌÐòԱѧϰ֪ʶµÄ¹ã¶È¡£

Runnable½Ó¿ÚÖеÄrun()·½·¨µÄ·µ»ØÖµÊÇvoid£¬Ëü×öµÄÊÂÇéÖ»ÊÇ´¿´âµØÈ¥Ö´ÐÐrun()·½·¨ÖеĴúÂë¶øÒÑ£»Callable½Ó¿ÚÖеÄcall()·½·¨ÊÇÓзµ»ØÖµµÄ£¬ÊÇÒ»¸ö·ºÐÍ£¬ºÍFuture¡¢FutureTaskÅäºÏ¿ÉÒÔÓÃÀ´»ñÈ¡Òì²½Ö´ÐеĽá¹û¡£

ÕâÆäʵÊǺÜÓÐÓõÄÒ»¸öÌØÐÔ£¬ÒòΪ¶àÏß³ÌÏà±Èµ¥Ï̸߳üÄÑ¡¢¸ü¸´ÔÓµÄÒ»¸öÖØÒªÔ­Òò¾ÍÊÇÒòΪ¶àÏ̳߳äÂú×Åδ֪ÐÔ£¬Ä³ÌõÏß³ÌÊÇ·ñÖ´ÐÐÁË£¿Ä³ÌõÏß³ÌÖ´ÐÐÁ˶à¾Ã£¿Ä³ÌõÏß³ÌÖ´ÐеÄʱºòÎÒÃÇÆÚÍûµÄÊý¾ÝÊÇ·ñÒѾ­¸³ÖµÍê±Ï£¿ÎÞ·¨µÃÖª£¬ÎÒÃÇÄÜ×öµÄÖ»ÊǵȴýÕâÌõ¶àÏ̵߳ÄÈÎÎñÖ´ÐÐÍê±Ï¶øÒÑ¡£¶øCallable+Future/FutureTaskÈ´¿ÉÒÔ»ñÈ¡¶àÏß³ÌÔËÐеĽá¹û£¬¿ÉÒÔÔڵȴýʱ¼äÌ«³¤Ã»»ñÈ¡µ½ÐèÒªµÄÊý¾ÝµÄÇé¿öÏÂÈ¡Ïû¸ÃÏ̵߳ÄÈÎÎñ£¬ÕæµÄÊǷdz£ÓÐÓá£

5¡¢CyclicBarrierºÍCountDownLatchµÄÇø±ð

Á½¸ö¿´ÉÏÈ¥ÓеãÏñµÄÀ࣬¶¼ÔÚjava.util.concurrentÏ£¬¶¼¿ÉÒÔÓÃÀ´±íʾ´úÂëÔËÐе½Ä³¸öµãÉÏ£¬¶þÕßµÄÇø±ðÔÚÓÚ£º

£¨1£©CyclicBarrierµÄij¸öÏß³ÌÔËÐе½Ä³¸öµãÉÏÖ®ºó£¬¸ÃÏ̼߳´Í£Ö¹ÔËÐУ¬Ö±µ½ËùÓеÄÏ̶߳¼µ½´ïÁËÕâ¸öµã£¬ËùÓÐÏ̲߳ÅÖØÐÂÔËÐУ»CountDownLatchÔò²»ÊÇ£¬Ä³Ïß³ÌÔËÐе½Ä³¸öµãÉÏÖ®ºó£¬Ö»ÊǸøij¸öÊýÖµ-1¶øÒÑ£¬¸ÃÏ̼߳ÌÐøÔËÐÐ

£¨2£©CyclicBarrierÖ»ÄÜ»½ÆðÒ»¸öÈÎÎñ£¬CountDownLatch¿ÉÒÔ»½Æð¶à¸öÈÎÎñ

£¨3£©CyclicBarrier¿ÉÖØÓã¬CountDownLatch²»¿ÉÖØÓ㬼ÆÊýֵΪ0¸ÃCountDownLatch¾Í²»¿ÉÔÙÓÃÁË

6¡¢Volatile¹Ø¼ü×ÖµÄ×÷ÓÃ

Ò»¸ö·Ç³£ÖØÒªµÄÎÊÌ⣬ÊÇÿ¸öѧϰ¡¢Ó¦ÓöàÏ̵߳ÄJava³ÌÐòÔ±¶¼±ØÐëÕÆÎյġ£Àí½âvolatile¹Ø¼ü×ÖµÄ×÷ÓõÄÇ°ÌáÊÇÒªÀí½âJavaÄÚ´æÄ£ÐÍ£¬ÕâÀï¾Í²»½²JavaÄÚ´æÄ£ÐÍÁË£¬¿ÉÒԲμûµÚ31µã£¬volatile¹Ø¼ü×ÖµÄ×÷ÓÃÖ÷ÒªÓÐÁ½¸ö£º

£¨1£©¶àÏß³ÌÖ÷ҪΧÈƿɼûÐÔºÍÔ­×ÓÐÔÁ½¸öÌØÐÔ¶øÕ¹¿ª£¬Ê¹ÓÃvolatile¹Ø¼ü×ÖÐÞÊεıäÁ¿£¬±£Ö¤ÁËÆäÔÚ¶àÏß³ÌÖ®¼äµÄ¿É¼ûÐÔ£¬¼´Ã¿´Î¶ÁÈ¡µ½volatile±äÁ¿£¬Ò»¶¨ÊÇ×îеÄÊý¾Ý

£¨2£©´úÂëµ×²ãÖ´Ðв»ÏñÎÒÃÇ¿´µ½µÄ¸ß¼¶ÓïÑÔ¡ª-Java³ÌÐòÕâô¼òµ¥£¬ËüµÄÖ´ÐÐÊÇJava´úÂë¨C>×Ö½ÚÂë¨C>¸ù¾Ý×Ö½ÚÂëÖ´ÐжÔÓ¦µÄC/C++´úÂë¨C>C/C++´úÂë±»±àÒë³É»ã±àÓïÑÔ¨C>ºÍÓ²¼þµç·½»»¥£¬ÏÖʵÖУ¬ÎªÁË»ñÈ¡¸üºÃµÄÐÔÄÜJVM¿ÉÄÜ»á¶ÔÖ¸Áî½øÐÐÖØÅÅÐò£¬¶àÏß³ÌÏ¿ÉÄÜ»á³öÏÖһЩÒâÏë²»µ½µÄÎÊÌ⡣ʹÓÃvolatileÔò»á¶Ô½ûÖ¹ÓïÒåÖØÅÅÐò£¬µ±È»ÕâÒ²Ò»¶¨³Ì¶ÈÉϽµµÍÁË´úÂëÖ´ÐÐЧÂÊ

´Óʵ¼ù½Ç¶È¶øÑÔ£¬volatileµÄÒ»¸öÖØÒª×÷ÓþÍÊǺÍCAS½áºÏ£¬±£Ö¤ÁËÔ­×ÓÐÔ£¬ÏêϸµÄ¿ÉÒԲμûjava.util.concurrent.atomic°üϵÄÀ࣬±ÈÈçAtomicInteger¡£

7¡¢Ê²Ã´ÊÇḬ̈߳²È«

ÓÖÊÇÒ»¸öÀíÂÛµÄÎÊÌ⣬¸÷ʽ¸÷ÑùµÄ´ð°¸Óкܶ࣬ÎÒ¸ø³öÒ»¸ö¸öÈËÈÏΪ½âÊ͵Ø×îºÃµÄ£ºÈç¹ûÄãµÄ´úÂëÔÚ¶àÏß³ÌÏÂÖ´ÐкÍÔÚµ¥Ïß³ÌÏÂÖ´ÐÐÓÀÔ¶¶¼ÄÜ»ñµÃÒ»ÑùµÄ½á¹û£¬ÄÇôÄãµÄ´úÂë¾ÍÊÇḬ̈߳²È«µÄ¡£

Õâ¸öÎÊÌâÓÐÖµµÃÒ»ÌáµÄµØ·½£¬¾ÍÊÇḬ̈߳²È«Ò²ÊÇÓм¸¸ö¼¶±ðµÄ£º

£¨1£©²»¿É±ä

ÏñString¡¢Integer¡¢LongÕâЩ£¬¶¼ÊÇfinalÀàÐ͵ÄÀ࣬ÈκÎÒ»¸öÏ̶߳¼¸Ä±ä²»ÁËËüÃǵÄÖµ£¬Òª¸Ä±ä³ý·Çд´½¨Ò»¸ö£¬Òò´ËÕâЩ²»¿É±ä¶ÔÏó²»ÐèÒªÈκÎͬ²½ÊֶξͿÉÒÔÖ±½ÓÔÚ¶àÏ̻߳·¾³ÏÂʹÓÃ

£¨2£©¾ø¶ÔḬ̈߳²È«

²»¹ÜÔËÐÐʱ»·¾³ÈçºÎ£¬µ÷ÓÃÕ߶¼²»ÐèÒª¶îÍâµÄͬ²½´ëÊ©¡£Òª×öµ½ÕâÒ»µãͨ³£ÐèÒª¸¶³öÐí¶à¶îÍâµÄ´ú¼Û£¬JavaÖбê×¢×Ô¼ºÊÇḬ̈߳²È«µÄÀ࣬ʵ¼ÊÉϾø´ó¶àÊý¶¼²»ÊÇḬ̈߳²È«µÄ£¬²»¹ý¾ø¶ÔḬ̈߳²È«µÄÀ࣬JavaÖÐÒ²ÓУ¬±È·½ËµCopyOnWriteArrayList¡¢CopyOnWriteArraySet

£¨3£©Ïà¶ÔḬ̈߳²È«

Ïà¶ÔḬ̈߳²È«Ò²¾ÍÊÇÎÒÃÇͨ³£ÒâÒåÉÏËù˵µÄḬ̈߳²È«£¬ÏñVectorÕâÖÖ£¬add¡¢remove·½·¨¶¼ÊÇÔ­×Ó²Ù×÷£¬²»»á±»´ò¶Ï£¬µ«Ò²½öÏÞÓÚ´Ë£¬Èç¹ûÓиöÏß³ÌÔÚ±éÀúij¸öVector¡¢ÓиöÏß³ÌͬʱÔÚaddÕâ¸öVector£¬99%µÄÇé¿ö϶¼»á³öÏÖConcurrentModificationException£¬Ò²¾ÍÊÇfail-fast»úÖÆ¡£

£¨4£©Ï̷߳ǰ²È«

Õâ¸ö¾ÍûʲôºÃ˵µÄÁË£¬ArrayList¡¢LinkedList¡¢HashMapµÈ¶¼ÊÇÏ̷߳ǰ²È«µÄÀà

8¡¢JavaÖÐÈçºÎ»ñÈ¡µ½Ïß³ÌdumpÎļþ

ËÀÑ­»·¡¢ËÀËø¡¢×èÈû¡¢Ò³Ãæ´ò¿ªÂýµÈÎÊÌ⣬´òÏß³ÌdumpÊÇ×îºÃµÄ½â¾öÎÊÌâµÄ;¾¶¡£ËùνÏß³ÌdumpÒ²¾ÍÊÇÏ̶߳ÑÕ»£¬»ñÈ¡µ½Ï̶߳ÑÕ»ÓÐÁ½²½£º

£¨1£©»ñÈ¡µ½Ï̵߳Äpid£¬¿ÉÒÔͨ¹ýʹÓÃjpsÃüÁÔÚLinux»·¾³Ï»¹¿ÉÒÔʹÓÃps -ef | grep java

£¨2£©´òÓ¡Ï̶߳ÑÕ»£¬¿ÉÒÔͨ¹ýʹÓÃjstack pidÃüÁÔÚLinux»·¾³Ï»¹¿ÉÒÔʹÓÃkill -3 pid

ÁíÍâÌáÒ»µã£¬ThreadÀàÌṩÁËÒ»¸ögetStackTrace()·½·¨Ò²¿ÉÒÔÓÃÓÚ»ñÈ¡Ï̶߳ÑÕ»¡£ÕâÊÇÒ»¸öʵÀý·½·¨£¬Òò´Ë´Ë·½·¨ÊǺ;ßÌåÏß³ÌʵÀý°ó¶¨µÄ£¬Ã¿´Î»ñÈ¡»ñÈ¡µ½µÄÊǾßÌåij¸öÏ̵߳±Ç°ÔËÐеĶÑÕ»£¬

9¡¢Ò»¸öÏß³ÌÈç¹û³öÏÖÁËÔËÐÐʱÒì³£»áÔõôÑù

Èç¹ûÕâ¸öÒ쳣ûÓб»²¶»ñµÄ»°£¬Õâ¸öÏ߳̾ÍÍ£Ö¹Ö´ÐÐÁË¡£ÁíÍâÖØÒªµÄÒ»µãÊÇ£ºÈç¹ûÕâ¸öÏ̳߳ÖÓÐij¸öij¸ö¶ÔÏóµÄ¼àÊÓÆ÷£¬ÄÇôÕâ¸ö¶ÔÏó¼àÊÓÆ÷»á±»Á¢¼´ÊÍ·Å

10¡¢ÈçºÎÔÚÁ½¸öÏß³ÌÖ®¼ä¹²ÏíÊý¾Ý

ͨ¹ýÔÚÏß³ÌÖ®¼ä¹²Ïí¶ÔÏó¾Í¿ÉÒÔÁË£¬È»ºóͨ¹ýwait/notify/notifyAll¡¢await/signal/signalAll½øÐл½ÆðºÍµÈ´ý£¬±È·½Ëµ×èÈû¶ÓÁÐBlockingQueue¾ÍÊÇΪÏß³ÌÖ®¼ä¹²ÏíÊý¾Ý¶øÉè¼ÆµÄ

11¡¢sleep·½·¨ºÍwait·½·¨ÓÐʲôÇø±ð

Õâ¸öÎÊÌâ³£ÎÊ£¬sleep·½·¨ºÍwait·½·¨¶¼¿ÉÒÔÓÃÀ´·ÅÆúCPUÒ»¶¨µÄʱ¼ä£¬²»Í¬µãÔÚÓÚÈç¹ûÏ̳߳ÖÓÐij¸ö¶ÔÏóµÄ¼àÊÓÆ÷£¬sleep·½·¨²»»á·ÅÆúÕâ¸ö¶ÔÏóµÄ¼àÊÓÆ÷£¬wait·½·¨»á·ÅÆúÕâ¸ö¶ÔÏóµÄ¼àÊÓÆ÷

12¡¢Éú²úÕßÏû·ÑÕßÄ£Ð͵Ä×÷ÓÃÊÇʲô

Õâ¸öÎÊÌâºÜÀíÂÛ£¬µ«ÊǺÜÖØÒª£º

£¨1£©Í¨¹ýƽºâÉú²úÕßµÄÉú²úÄÜÁ¦ºÍÏû·ÑÕßµÄÏû·ÑÄÜÁ¦À´ÌáÉýÕû¸öϵͳµÄÔËÐÐЧÂÊ£¬ÕâÊÇÉú²úÕßÏû·ÑÕßÄ£ÐÍ×îÖØÒªµÄ×÷ÓÃ

£¨2£©½âñÕâÊÇÉú²úÕßÏû·ÑÕßÄ£Ð͸½´øµÄ×÷Ó㬽âñîÒâζ×ÅÉú²úÕߺÍÏû·ÑÕßÖ®¼äµÄÁªÏµÉÙ£¬ÁªÏµÔ½ÉÙÔ½¿ÉÒÔ¶À×Ô·¢Õ¹¶ø²»ÐèÒªÊÕµ½Ï໥µÄÖÆÔ¼

13¡¢ThreadLocalÓÐʲôÓÃ

¼òµ¥ËµThreadLocal¾ÍÊÇÒ»ÖÖÒԿռ任ʱ¼äµÄ×ö·¨£¬ÔÚÿ¸öThreadÀïÃæά»¤ÁËÒ»¸öÒÔ¿ªµØÖ··¨ÊµÏÖµÄThreadLocal.ThreadLocalMap£¬°ÑÊý¾Ý½øÐиôÀ룬Êý¾Ý²»¹²Ïí£¬×ÔÈ»¾ÍûÓÐḬ̈߳²È«·½ÃæµÄÎÊÌâÁË

14¡¢ÎªÊ²Ã´wait()·½·¨ºÍnotify()/notifyAll()·½·¨ÒªÔÚͬ²½¿éÖб»µ÷ÓÃ

ÕâÊÇJDKÇ¿ÖƵģ¬wait()·½·¨ºÍnotify()/notifyAll()·½·¨ÔÚµ÷ÓÃÇ°¶¼±ØÐëÏÈ»ñµÃ¶ÔÏóµÄËø

15¡¢wait()·½·¨ºÍnotify()/notifyAll()·½·¨ÔÚ·ÅÆú¶ÔÏó¼àÊÓÆ÷ʱÓÐʲôÇø±ð

wait()·½·¨ºÍnotify()/notifyAll()·½·¨ÔÚ·ÅÆú¶ÔÏó¼àÊÓÆ÷µÄʱºòµÄÇø±ðÔÚÓÚ£ºwait()·½·¨Á¢¼´ÊͷŶÔÏó¼àÊÓÆ÷£¬notify()/notifyAll()·½·¨Ôò»áµÈ´ýÏß³ÌÊ£Óà´úÂëÖ´ÐÐÍê±Ï²Å»á·ÅÆú¶ÔÏó¼àÊÓÆ÷¡£

16¡¢ÎªÊ²Ã´ÒªÊ¹ÓÃÏ̳߳Ø

±ÜÃâƵ·±µØ´´½¨ºÍÏú»ÙỊ̈߳¬´ïµ½Ï̶߳ÔÏóµÄÖØÓá£ÁíÍ⣬ʹÓÃÏ̳߳ػ¹¿ÉÒÔ¸ù¾ÝÏîÄ¿Áé»îµØ¿ØÖƲ¢·¢µÄÊýÄ¿¡£

17¡¢Ôõô¼ì²âÒ»¸öÏß³ÌÊÇ·ñ³ÖÓжÔÏó¼àÊÓÆ÷

ÎÒÒ²ÊÇÔÚÍøÉÏ¿´µ½Ò»µÀ¶àÏß³ÌÃæÊÔÌâ²ÅÖªµÀÓз½·¨¿ÉÒÔÅжÏij¸öÏß³ÌÊÇ·ñ³ÖÓжÔÏó¼àÊÓÆ÷£ºThreadÀàÌṩÁËÒ»¸öholdsLock(Object obj)·½·¨£¬µ±ÇÒ½öµ±¶ÔÏóobjµÄ¼àÊÓÆ÷±»Ä³ÌõÏ̳߳ÖÓеÄʱºò²Å»á·µ»Øtrue£¬×¢ÒâÕâÊÇÒ»¸östatic·½·¨£¬ÕâÒâζ×Å¡°Ä³ÌõÏ̡߳±Ö¸µÄÊǵ±Ç°Ï̡߳£

18¡¢synchronizedºÍReentrantLockµÄÇø±ð

synchronizedÊǺÍif¡¢else¡¢for¡¢whileÒ»ÑùµÄ¹Ø¼ü×Ö£¬ReentrantLockÊÇÀ࣬ÕâÊǶþÕߵı¾ÖÊÇø±ð¡£¼ÈÈ»ReentrantLockÊÇÀ࣬ÄÇôËü¾ÍÌṩÁ˱Èsynchronized¸ü¶à¸üÁé»îµÄÌØÐÔ£¬¿ÉÒÔ±»¼Ì³Ð¡¢¿ÉÒÔÓз½·¨¡¢¿ÉÒÔÓи÷ÖÖ¸÷ÑùµÄÀà±äÁ¿£¬ReentrantLock±ÈsynchronizedµÄÀ©Õ¹ÐÔÌåÏÖÔÚ¼¸µãÉÏ£º

£¨1£©ReentrantLock¿ÉÒÔ¶Ô»ñÈ¡ËøµÄµÈ´ýʱ¼ä½øÐÐÉèÖã¬ÕâÑù¾Í±ÜÃâÁËËÀËø

£¨2£©ReentrantLock¿ÉÒÔ»ñÈ¡¸÷ÖÖËøµÄÐÅÏ¢

£¨3£©ReentrantLock¿ÉÒÔÁé»îµØʵÏÖ¶à·֪ͨ

ÁíÍ⣬¶þÕßµÄËø»úÖÆÆäʵҲÊDz»Ò»ÑùµÄ¡£ReentrantLockµ×²ãµ÷ÓõÄÊÇUnsafeµÄpark·½·¨¼ÓËø£¬synchronized²Ù×÷µÄÓ¦¸ÃÊǶÔÏóÍ·ÖÐmark word£¬ÕâµãÎÒ²»ÄÜÈ·¶¨¡£

19¡¢ConcurrentHashMapµÄ²¢·¢¶ÈÊÇʲô

ConcurrentHashMapµÄ²¢·¢¶È¾ÍÊÇsegmentµÄ´óС£¬Ä¬ÈÏΪ16£¬ÕâÒâζ×Å×î¶àͬʱ¿ÉÒÔÓÐ16ÌõÏ̲߳Ù×÷ConcurrentHashMap£¬ÕâÒ²ÊÇConcurrentHashMap¶ÔHashtableµÄ×î´óÓÅÊÆ£¬ÈκÎÇé¿öÏ£¬HashtableÄÜͬʱÓÐÁ½ÌõÏ̻߳ñÈ¡HashtableÖеÄÊý¾ÝÂð£¿

20¡¢ReadWriteLockÊÇʲô

Ê×ÏÈÃ÷ȷһϣ¬²»ÊÇ˵ReentrantLock²»ºÃ£¬Ö»ÊÇReentrantLockijЩʱºòÓоÖÏÞ¡£Èç¹ûʹÓÃReentrantLock£¬¿ÉÄܱ¾ÉíÊÇΪÁË·ÀÖ¹Ïß³ÌAÔÚдÊý¾Ý¡¢Ïß³ÌBÔÚ¶ÁÊý¾ÝÔì³ÉµÄÊý¾Ý²»Ò»Ö£¬µ«ÕâÑù£¬Èç¹ûÏß³ÌCÔÚ¶ÁÊý¾Ý¡¢Ïß³ÌDÒ²ÔÚ¶ÁÊý¾Ý£¬¶ÁÊý¾ÝÊDz»»á¸Ä±äÊý¾ÝµÄ£¬Ã»ÓбØÒª¼ÓËø£¬µ«ÊÇ»¹ÊǼÓËøÁË£¬½µµÍÁ˳ÌÐòµÄÐÔÄÜ¡£

ÒòΪÕâ¸ö£¬²Åµ®ÉúÁ˶ÁдËøReadWriteLock¡£ReadWriteLockÊÇÒ»¸ö¶ÁдËø½Ó¿Ú£¬ReentrantReadWriteLockÊÇReadWriteLock½Ó¿ÚµÄÒ»¸ö¾ßÌåʵÏÖ£¬ÊµÏÖÁ˶ÁдµÄ·ÖÀ룬¶ÁËøÊǹ²ÏíµÄ£¬Ð´ËøÊǶÀÕ¼µÄ£¬¶ÁºÍ¶ÁÖ®¼ä²»»á»¥³â£¬¶ÁºÍд¡¢Ð´ºÍ¶Á¡¢Ð´ºÍд֮¼ä²Å»á»¥³â£¬ÌáÉýÁ˶ÁдµÄÐÔÄÜ¡£

21¡¢FutureTaskÊÇʲô

Õâ¸öÆäʵǰÃæÓÐÌáµ½¹ý£¬FutureTask±íʾһ¸öÒì²½ÔËËãµÄÈÎÎñ¡£FutureTaskÀïÃæ¿ÉÒÔ´«ÈëÒ»¸öCallableµÄ¾ßÌåʵÏÖÀ࣬¿ÉÒÔ¶ÔÕâ¸öÒì²½ÔËËãµÄÈÎÎñµÄ½á¹û½øÐеȴý»ñÈ¡¡¢ÅжÏÊÇ·ñÒѾ­Íê³É¡¢È¡ÏûÈÎÎñµÈ²Ù×÷¡£µ±È»£¬ÓÉÓÚFutureTaskÒ²ÊÇRunnable½Ó¿ÚµÄʵÏÖÀ࣬ËùÒÔFutureTaskÒ²¿ÉÒÔ·ÅÈëÏ̳߳ØÖС£

22¡¢Linux»·¾³ÏÂÈçºÎ²éÕÒÄĸöÏß³ÌʹÓÃCPU×

ÕâÊÇÒ»¸ö±È½Ïƫʵ¼ùµÄÎÊÌ⣬ÕâÖÖÎÊÌâÎÒ¾õµÃͦÓÐÒâÒåµÄ¡£¿ÉÒÔÕâô×ö£º

£¨1£©»ñÈ¡ÏîÄ¿µÄpid£¬jps»òÕßps -ef | grep java£¬Õâ¸öÇ°ÃæÓн²¹ý

£¨2£©top -H -p pid£¬Ë³Ðò²»Äܸıä

ÕâÑù¾Í¿ÉÒÔ´òÓ¡³öµ±Ç°µÄÏîÄ¿£¬Ã¿ÌõÏß³ÌÕ¼ÓÃCPUʱ¼äµÄ°Ù·Ö±È¡£×¢ÒâÕâÀï´ò³öµÄÊÇLWP£¬Ò²¾ÍÊDzÙ×÷ϵͳԭÉúÏ̵߳ÄÏ̺߳ţ¬ÎұʼDZ¾É½Ã»Óв¿ÊðLinux»·¾³ÏµÄJava¹¤³Ì£¬Òò´ËûÓа취½ØͼÑÝʾ£¬ÍøÓÑÅóÓÑÃÇÈç¹û¹«Ë¾ÊÇʹÓÃLinux»·¾³²¿ÊðÏîÄ¿µÄ»°£¬¿ÉÒÔ³¢ÊÔһϡ£

ʹÓá±top -H -p pid¡±+¡±jps pid¡±¿ÉÒÔºÜÈÝÒ×µØÕÒµ½Ä³ÌõÕ¼ÓÃCPU¸ßµÄÏ̵߳ÄÏ̶߳ÑÕ»£¬´Ó¶ø¶¨Î»Õ¼ÓÃCPU¸ßµÄÔ­Òò£¬Ò»°ãÊÇÒòΪ²»µ±µÄ´úÂë²Ù×÷µ¼ÖÂÁËËÀÑ­»·¡£

×îºóÌáÒ»µã£¬¡±top -H -p pid¡±´ò³öÀ´µÄLWPÊÇÊ®½øÖƵģ¬¡±jps pid¡±´ò³öÀ´µÄ±¾µØÏ̺߳ÅÊÇÊ®Áù½øÖƵģ¬×ª»»Ò»Ï£¬¾ÍÄܶ¨Î»µ½Õ¼ÓÃCPU¸ßµÄÏ̵߳ĵ±Ç°Ï̶߳ÑÕ»ÁË¡£

23¡¢Java±à³Ìдһ¸ö»áµ¼ÖÂËÀËøµÄ³ÌÐò

µÚÒ»´Î¿´µ½Õâ¸öÌâÄ¿£¬¾õµÃÕâÊÇÒ»¸ö·Ç³£ºÃµÄÎÊÌâ¡£ºÜ¶àÈ˶¼ÖªµÀËÀËøÊÇÔõôһ»Øʶù£ºÏß³ÌAºÍÏß³ÌBÏ໥µÈ´ý¶Ô·½³ÖÓеÄËøµ¼Ö³ÌÐòÎÞÏÞËÀÑ­»·ÏÂÈ¥¡£µ±È»Ò²½öÏÞÓÚ´ËÁË£¬ÎÊÒ»ÏÂÔõôдһ¸öËÀËøµÄ³ÌÐò¾Í²»ÖªµÀÁË£¬ÕâÖÖÇé¿ö˵°×Á˾ÍÊDz»¶®Ê²Ã´ÊÇËÀËø£¬¶®Ò»¸öÀíÂÛ¾ÍÍêʶùÁË£¬Êµ¼ùÖÐÅöµ½ËÀËøµÄÎÊÌâ»ù±¾ÉÏÊÇ¿´²»³öÀ´µÄ¡£

ÕæÕýÀí½âʲôÊÇËÀËø£¬Õâ¸öÎÊÌâÆäʵ²»ÄÑ£¬¼¸¸ö²½Ö裺

£¨1£©Á½¸öÏß³ÌÀïÃæ·Ö±ð³ÖÓÐÁ½¸öObject¶ÔÏó£ºlock1ºÍlock2¡£ÕâÁ½¸ölock×÷Ϊͬ²½´úÂë¿éµÄËø£»

£¨2£©Ïß³Ì1µÄrun()·½·¨ÖÐͬ²½´úÂë¿éÏÈ»ñÈ¡lock1µÄ¶ÔÏóËø£¬Thread.sleep(xxx)£¬Ê±¼ä²»ÐèҪ̫¶à£¬50ºÁÃë²î²»¶àÁË£¬È»ºó½Ó×Å»ñÈ¡lock2µÄ¶ÔÏóËø¡£Õâô×öÖ÷ÒªÊÇΪÁË·ÀÖ¹Ïß³Ì1Æô¶¯Ò»ÏÂ×Ó¾ÍÁ¬Ðø»ñµÃÁËlock1ºÍlock2Á½¸ö¶ÔÏóµÄ¶ÔÏóËø

£¨3£©Ïß³Ì2µÄrun)(·½·¨ÖÐͬ²½´úÂë¿éÏÈ»ñÈ¡lock2µÄ¶ÔÏóËø£¬½Ó×Å»ñÈ¡lock1µÄ¶ÔÏóËø£¬µ±È»Õâʱlock1µÄ¶ÔÏóËøÒѾ­±»Ïß³Ì1Ëø³ÖÓУ¬Ïß³Ì2¿Ï¶¨ÊÇÒªµÈ´ýÏß³Ì1ÊÍ·Ålock1µÄ¶ÔÏóËøµÄ

ÕâÑù£¬Ïß³Ì1¡å˯¾õ¡±Ë¯Í꣬Ïß³Ì2ÒѾ­»ñÈ¡ÁËlock2µÄ¶ÔÏóËøÁË£¬Ïß³Ì1´Ëʱ³¢ÊÔ»ñÈ¡lock2µÄ¶ÔÏóËø£¬±ã±»×èÈû£¬´Ëʱһ¸öËÀËø¾ÍÐγÉÁË¡£´úÂë¾Í²»Ð´ÁË£¬Õ¼µÄƪ·ùÓеã¶à£¬Java¶àÏß³Ì7£ºËÀËøÕâƪÎÄÕÂÀïÃæÓУ¬¾ÍÊÇÉÏÃæ²½ÖèµÄ´úÂëʵÏÖ¡£

24¡¢Ôõô»½ÐÑÒ»¸ö×èÈûµÄÏß³Ì

Èç¹ûÏß³ÌÊÇÒòΪµ÷ÓÃÁËwait()¡¢sleep()»òÕßjoin()·½·¨¶øµ¼ÖµÄ×èÈû£¬¿ÉÒÔÖжÏỊ̈߳¬²¢ÇÒͨ¹ýÅ׳öInterruptedExceptionÀ´»½ÐÑËü£»Èç¹ûÏß³ÌÓöµ½ÁËIO×èÈû£¬ÎÞÄÜΪÁ¦£¬ÒòΪIOÊDzÙ×÷ϵͳʵÏֵģ¬Java´úÂ벢ûÓа취ֱ½Ó½Ó´¥µ½²Ù×÷ϵͳ¡£

25¡¢²»¿É±ä¶ÔÏó¶Ô¶àÏß³ÌÓÐʲô°ïÖú

Ç°ÃæÓÐÌáµ½¹ýµÄÒ»¸öÎÊÌ⣬²»¿É±ä¶ÔÏó±£Ö¤Á˶ÔÏóµÄÄÚ´æ¿É¼ûÐÔ£¬¶Ô²»¿É±ä¶ÔÏóµÄ¶ÁÈ¡²»ÐèÒª½øÐжîÍâµÄͬ²½ÊֶΣ¬ÌáÉýÁË´úÂëÖ´ÐÐЧÂÊ¡£

26¡¢Ê²Ã´ÊǶàÏ̵߳ÄÉÏÏÂÎÄÇл»

¶àÏ̵߳ÄÉÏÏÂÎÄÇл»ÊÇÖ¸CPU¿ØÖÆȨÓÉÒ»¸öÒѾ­ÕýÔÚÔËÐеÄÏß³ÌÇл»µ½ÁíÍâÒ»¸ö¾ÍÐ÷²¢µÈ´ý»ñÈ¡CPUÖ´ÐÐȨµÄÏ̵߳Ĺý³Ì¡£

27¡¢Èç¹ûÄãÌá½»ÈÎÎñʱ£¬Ï̳߳ضÓÁÐÒÑÂú£¬Õâʱ»á·¢Éúʲô

Èç¹ûÄãʹÓõÄLinkedBlockingQueue£¬Ò²¾ÍÊÇÎÞ½ç¶ÓÁеĻ°£¬Ã»¹Øϵ£¬¼ÌÐøÌí¼ÓÈÎÎñµ½×èÈû¶ÓÁÐÖеȴýÖ´ÐУ¬ÒòΪLinkedBlockingQueue¿ÉÒÔ½üºõÈÏΪÊÇÒ»¸öÎÞÇî´óµÄ¶ÓÁУ¬¿ÉÒÔÎÞÏÞ´æ·ÅÈÎÎñ£»Èç¹ûÄãʹÓõÄÊÇÓнç¶ÓÁбȷ½ËµArrayBlockingQueueµÄ»°£¬ÈÎÎñÊ×ÏȻᱻÌí¼Óµ½ArrayBlockingQueueÖУ¬ArrayBlockingQueueÂúÁË£¬Ôò»áʹÓþܾø²ßÂÔRejectedExecutionHandler´¦ÀíÂúÁ˵ÄÈÎÎñ£¬Ä¬ÈÏÊÇAbortPolicy¡£

28¡¢JavaÖÐÓõ½µÄÏ̵߳÷¶ÈËã·¨ÊÇʲô

ÇÀռʽ¡£Ò»¸öÏß³ÌÓÃÍêCPUÖ®ºó£¬²Ù×÷ϵͳ»á¸ù¾ÝÏß³ÌÓÅÏȼ¶¡¢Ï̼߳¢¶öÇé¿öµÈÊý¾ÝËã³öÒ»¸ö×ܵÄÓÅÏȼ¶²¢·ÖÅäÏÂÒ»¸öʱ¼äƬ¸øij¸öÏß³ÌÖ´ÐС£

29¡¢Thread.sleep(0)µÄ×÷ÓÃÊÇʲô

Õâ¸öÎÊÌâºÍÉÏÃæÄǸöÎÊÌâÊÇÏà¹ØµÄ£¬ÎÒ¾ÍÁ¬ÔÚÒ»ÆðÁË¡£ÓÉÓÚJava²ÉÓÃÇÀռʽµÄÏ̵߳÷¶ÈËã·¨£¬Òò´Ë¿ÉÄÜ»á³öÏÖijÌõÏ̳߳£³£»ñÈ¡µ½CPU¿ØÖÆȨµÄÇé¿ö£¬ÎªÁËÈÃijЩÓÅÏȼ¶±È½ÏµÍµÄÏß³ÌÒ²ÄÜ»ñÈ¡µ½CPU¿ØÖÆȨ£¬¿ÉÒÔʹÓÃThread.sleep(0)ÊÖ¶¯´¥·¢Ò»´Î²Ù×÷ϵͳ·ÖÅäʱ¼äƬµÄ²Ù×÷£¬ÕâÒ²ÊÇƽºâCPU¿ØÖÆȨµÄÒ»ÖÖ²Ù×÷¡£

30¡¢Ê²Ã´ÊÇ×ÔÐý

ºÜ¶àsynchronizedÀïÃæµÄ´úÂëÖ»ÊÇһЩºÜ¼òµ¥µÄ´úÂ룬ִÐÐʱ¼ä·Ç³£¿ì£¬´ËʱµÈ´ýµÄÏ̶߳¼¼ÓËø¿ÉÄÜÊÇÒ»ÖÖ²»Ì«ÖµµÃµÄ²Ù×÷£¬ÒòΪÏß³Ì×èÈûÉæ¼°µ½Óû§Ì¬ºÍÄÚºË̬Çл»µÄÎÊÌâ¡£¼ÈÈ»synchronizedÀïÃæµÄ´úÂëÖ´Ðеطdz£¿ì£¬²»·ÁÈõȴýËøµÄÏ̲߳»Òª±»×èÈû£¬¶øÊÇÔÚsynchronizedµÄ±ß½ç×öæѭ»·£¬Õâ¾ÍÊÇ×ÔÐý¡£Èç¹û×öÁ˶à´Îæѭ»··¢ÏÖ»¹Ã»ÓлñµÃËø£¬ÔÙ×èÈû£¬ÕâÑù¿ÉÄÜÊÇÒ»ÖÖ¸üºÃµÄ²ßÂÔ¡£

31¡¢Ê²Ã´ÊÇJavaÄÚ´æÄ£ÐÍ

JavaÄÚ´æÄ£ÐͶ¨ÒåÁËÒ»ÖÖ¶àÏ̷߳ÃÎÊJavaÄÚ´æµÄ¹æ·¶¡£JavaÄÚ´æÄ£ÐÍÒªÍêÕû½²²»ÊÇÕâÀX¾ä»°ÄÜ˵Çå³þµÄ£¬ÎÒ¼òµ¥×ܽáÒ»ÏÂJavaÄÚ´æÄ£Ð͵ļ¸²¿·ÖÄÚÈÝ£º

£¨1£©JavaÄÚ´æÄ£Ðͽ«ÄÚ´æ·ÖΪÁËÖ÷ÄÚ´æºÍ¹¤×÷ÄÚ´æ¡£ÀàµÄ״̬£¬Ò²¾ÍÊÇÀàÖ®¼ä¹²ÏíµÄ±äÁ¿£¬ÊÇ´æ´¢ÔÚÖ÷ÄÚ´æÖеģ¬Ã¿´ÎJavaÏß³ÌÓõ½ÕâЩÖ÷ÄÚ´æÖеıäÁ¿µÄʱºò£¬»á¶ÁÒ»´ÎÖ÷ÄÚ´æÖеıäÁ¿£¬²¢ÈÃÕâЩÄÚ´æÔÚ×Ô¼ºµÄ¹¤×÷ÄÚ´æÖÐÓÐÒ»·Ý¿½±´£¬ÔËÐÐ×Ô¼ºÏ̴߳úÂëµÄʱºò£¬Óõ½ÕâЩ±äÁ¿£¬²Ù×÷µÄ¶¼ÊÇ×Ô¼º¹¤×÷ÄÚ´æÖеÄÄÇÒ»·Ý¡£ÔÚÏ̴߳úÂëÖ´ÐÐÍê±ÏÖ®ºó£¬»á½«×îеÄÖµ¸üе½Ö÷ÄÚ´æÖÐÈ¥

£¨2£©¶¨ÒåÁ˼¸¸öÔ­×Ó²Ù×÷£¬ÓÃÓÚ²Ù×÷Ö÷ÄÚ´æºÍ¹¤×÷ÄÚ´æÖеıäÁ¿

£¨3£©¶¨ÒåÁËvolatile±äÁ¿µÄʹÓùæÔò

£¨4£©happens-before£¬¼´ÏÈÐз¢ÉúÔ­Ôò£¬¶¨ÒåÁ˲Ù×÷A±ØÈ»ÏÈÐз¢ÉúÓÚ²Ù×÷BµÄһЩ¹æÔò£¬±ÈÈçÔÚͬһ¸öÏß³ÌÄÚ¿ØÖÆÁ÷Ç°ÃæµÄ´úÂëÒ»¶¨ÏÈÐз¢ÉúÓÚ¿ØÖÆÁ÷ºóÃæµÄ´úÂë¡¢Ò»¸öÊÍ·ÅËøunlockµÄ¶¯×÷Ò»¶¨ÏÈÐз¢ÉúÓÚºóÃæ¶ÔÓÚͬһ¸öËø½øÐÐËø¶¨lockµÄ¶¯×÷µÈµÈ£¬Ö»Òª·ûºÏÕâЩ¹æÔò£¬Ôò²»ÐèÒª¶îÍâ×öͬ²½´ëÊ©£¬Èç¹ûij¶Î´úÂë²»·ûºÏËùÓеÄhappens-before¹æÔò£¬ÔòÕâ¶Î´úÂëÒ»¶¨ÊÇÏ̷߳ǰ²È«µÄ

32¡¢Ê²Ã´ÊÇCAS

CAS£¬È«³ÆΪCompare and Set£¬¼´±È½Ï-ÉèÖ᣼ÙÉèÓÐÈý¸ö²Ù×÷Êý£ºÄÚ´æÖµV¡¢¾ÉµÄÔ¤ÆÚÖµA¡¢ÒªÐ޸ĵÄÖµB£¬µ±ÇÒ½öµ±Ô¤ÆÚÖµAºÍÄÚ´æÖµVÏàͬʱ£¬²Å»á½«ÄÚ´æÖµÐÞ¸ÄΪB²¢·µ»Øtrue£¬·ñÔòʲô¶¼²»×ö²¢·µ»Øfalse¡£µ±È»CASÒ»¶¨Òªvolatile±äÁ¿ÅäºÏ£¬ÕâÑù²ÅÄܱ£Ö¤Ã¿´ÎÄõ½µÄ±äÁ¿ÊÇÖ÷ÄÚ´æÖÐ×îеÄÄǸöÖµ£¬·ñÔò¾ÉµÄÔ¤ÆÚÖµA¶ÔijÌõÏß³ÌÀ´Ëµ£¬ÓÀÔ¶ÊÇÒ»¸ö²»»á±äµÄÖµA£¬Ö»ÒªÄ³´ÎCAS²Ù×÷ʧ°Ü£¬ÓÀÔ¶¶¼²»¿ÉÄܳɹ¦¡£

33¡¢Ê²Ã´ÊÇÀÖ¹ÛËøºÍ±¯¹ÛËø

£¨1£©ÀÖ¹ÛËø£º¾ÍÏñËüµÄÃû×ÖÒ»Ñù£¬¶ÔÓÚ²¢·¢¼ä²Ù×÷²úÉúµÄḬ̈߳²È«ÎÊÌâ³ÖÀÖ¹Û״̬£¬ÀÖ¹ÛËøÈÏΪ¾ºÕù²»×ÜÊǻᷢÉú£¬Òò´ËËü²»ÐèÒª³ÖÓÐËø£¬½«±È½Ï-ÉèÖÃÕâÁ½¸ö¶¯×÷×÷Ϊһ¸öÔ­×Ó²Ù×÷³¢ÊÔÈ¥ÐÞ¸ÄÄÚ´æÖеıäÁ¿£¬Èç¹ûʧ°ÜÔò±íʾ·¢Éú³åÍ»£¬ÄÇô¾ÍÓ¦¸ÃÓÐÏàÓ¦µÄÖØÊÔÂß¼­¡£

£¨2£©±¯¹ÛËø£º»¹ÊÇÏñËüµÄÃû×ÖÒ»Ñù£¬¶ÔÓÚ²¢·¢¼ä²Ù×÷²úÉúµÄḬ̈߳²È«ÎÊÌâ³Ö±¯¹Û״̬£¬±¯¹ÛËøÈÏΪ¾ºÕù×ÜÊǻᷢÉú£¬Òò´Ëÿ´Î¶Ôij×ÊÔ´½øÐвÙ×÷ʱ£¬¶¼»á³ÖÓÐÒ»¸ö¶ÀÕ¼µÄËø£¬¾ÍÏñsynchronized£¬²»¹ÜÈýÆ߶þʮһ£¬Ö±½ÓÉÏÁËËø¾Í²Ù×÷×ÊÔ´ÁË¡£

34¡¢Ê²Ã´ÊÇAQS

¼òµ¥ËµÒ»ÏÂAQS£¬AQSÈ«³ÆΪAbstractQueuedSychronizer£¬·­Òë¹ýÀ´Ó¦¸ÃÊdzéÏó¶ÓÁÐͬ²½Æ÷¡£

Èç¹û˵java.util.concurrentµÄ»ù´¡ÊÇCASµÄ»°£¬ÄÇôAQS¾ÍÊÇÕû¸öJava²¢·¢°üµÄºËÐÄÁË£¬ReentrantLock¡¢CountDownLatch¡¢SemaphoreµÈµÈ¶¼Óõ½ÁËËü¡£AQSʵ¼ÊÉÏÒÔË«Ïò¶ÓÁеÄÐÎʽÁ¬½ÓËùÓеÄEntry£¬±È·½ËµReentrantLock£¬ËùÓеȴýµÄÏ̶߳¼±»·ÅÔÚÒ»¸öEntryÖв¢Á¬³ÉË«Ïò¶ÓÁУ¬Ç°ÃæÒ»¸öÏß³ÌʹÓÃReentrantLockºÃÁË£¬ÔòË«Ïò¶ÓÁÐʵ¼ÊÉϵĵÚÒ»¸öEntry¿ªÊ¼ÔËÐС£

AQS¶¨ÒåÁ˶ÔË«Ïò¶ÓÁÐËùÓеIJÙ×÷£¬¶øÖ»¿ª·ÅÁËtryLockºÍtryRelease·½·¨¸ø¿ª·¢ÕßʹÓ㬿ª·¢Õß¿ÉÒÔ¸ù¾Ý×Ô¼ºµÄʵÏÖÖØдtryLockºÍtryRelease·½·¨£¬ÒÔʵÏÖ×Ô¼ºµÄ²¢·¢¹¦ÄÜ¡£

35¡¢µ¥ÀýģʽµÄḬ̈߳²È«ÐÔ

ÀÏÉú³£Ì¸µÄÎÊÌâÁË£¬Ê×ÏÈҪ˵µÄÊǵ¥ÀýģʽµÄḬ̈߳²È«Òâζ×Å£ºÄ³¸öÀàµÄʵÀýÔÚ¶àÏ̻߳·¾³ÏÂÖ»»á±»´´½¨Ò»´Î³öÀ´¡£µ¥ÀýģʽÓкܶàÖÖµÄд·¨£¬ÎÒ×ܽáһϣº

£¨1£©¶öººÊ½µ¥ÀýģʽµÄд·¨£ºḬ̈߳²È«

£¨2£©ÀÁººÊ½µ¥ÀýģʽµÄд·¨£º·ÇḬ̈߳²È«

£¨3£©Ë«¼ìËøµ¥ÀýģʽµÄд·¨£ºḬ̈߳²È«

36¡¢SemaphoreÓÐʲô×÷ÓÃ

Semaphore¾ÍÊÇÒ»¸öÐźÅÁ¿£¬ËüµÄ×÷ÓÃÊÇÏÞÖÆij¶Î´úÂë¿éµÄ²¢·¢Êý¡£SemaphoreÓÐÒ»¸ö¹¹Ô캯Êý£¬¿ÉÒÔ´«ÈëÒ»¸öintÐÍÕûÊýn£¬±íʾij¶Î´úÂë×î¶àÖ»ÓÐn¸öÏ߳̿ÉÒÔ·ÃÎÊ£¬Èç¹û³¬³öÁËn£¬ÄÇôÇëµÈ´ý£¬µÈµ½Ä³¸öÏß³ÌÖ´ÐÐÍê±ÏÕâ¶Î´úÂë¿é£¬ÏÂÒ»¸öÏß³ÌÔÙ½øÈë¡£ÓÉ´Ë¿ÉÒÔ¿´³öÈç¹ûSemaphore¹¹Ô캯ÊýÖд«ÈëµÄintÐÍÕûÊýn=1£¬Ï൱ÓÚ±ä³ÉÁËÒ»¸ösynchronizedÁË¡£

37¡¢HashtableµÄsize()·½·¨ÖÐÃ÷Ã÷Ö»ÓÐÒ»ÌõÓï¾ä¡±return count¡±£¬ÎªÊ²Ã´»¹Òª×öͬ²½£¿

ÕâÊÇÎÒ֮ǰµÄÒ»¸öÀ§»ó£¬²»ÖªµÀ´ó¼ÒÓÐûÓÐÏë¹ýÕâ¸öÎÊÌ⡣ij¸ö·½·¨ÖÐÈç¹ûÓжàÌõÓï¾ä£¬²¢ÇÒ¶¼ÔÚ²Ù×÷ͬһ¸öÀà±äÁ¿£¬ÄÇôÔÚ¶àÏ̻߳·¾³Ï²»¼ÓËø£¬ÊƱػáÒý·¢Ḭ̈߳²È«ÎÊÌ⣬ÕâºÜºÃÀí½â£¬µ«ÊÇsize()·½·¨Ã÷Ã÷Ö»ÓÐÒ»ÌõÓï¾ä£¬ÎªÊ²Ã´»¹Òª¼ÓËø£¿

¹ØÓÚÕâ¸öÎÊÌ⣬ÔÚÂýÂýµØ¹¤×÷¡¢Ñ§Ï°ÖУ¬ÓÐÁËÀí½â£¬Ö÷ÒªÔ­ÒòÓÐÁ½µã£º

£¨1£©Í¬Ò»Ê±¼äÖ»ÄÜÓÐÒ»ÌõÏß³ÌÖ´Ðй̶¨ÀàµÄͬ²½·½·¨£¬µ«ÊǶÔÓÚÀàµÄ·Çͬ²½·½·¨£¬¿ÉÒÔ¶àÌõÏß³Ìͬʱ·ÃÎÊ¡£ËùÒÔ£¬ÕâÑù¾ÍÓÐÎÊÌâÁË£¬¿ÉÄÜÏß³ÌAÔÚÖ´ÐÐHashtableµÄput·½·¨Ìí¼ÓÊý¾Ý£¬Ïß³ÌBÔò¿ÉÒÔÕý³£µ÷ÓÃsize()·½·¨¶ÁÈ¡HashtableÖе±Ç°ÔªËصĸöÊý£¬ÄǶÁÈ¡µ½µÄÖµ¿ÉÄܲ»ÊÇ×îеģ¬¿ÉÄÜÏß³ÌAÌí¼ÓÁËÍêÁËÊý¾Ý£¬µ«ÊÇûÓжÔsize++£¬Ïß³ÌB¾ÍÒѾ­¶ÁÈ¡sizeÁË£¬ÄÇô¶ÔÓÚÏß³ÌBÀ´Ëµ¶ÁÈ¡µ½µÄsizeÒ»¶¨ÊDz»×¼È·µÄ¡£¶ø¸øsize()·½·¨¼ÓÁËͬ²½Ö®ºó£¬Òâζ×ÅÏß³ÌBµ÷ÓÃsize()·½·¨Ö»ÓÐÔÚÏß³ÌAµ÷ÓÃput·½·¨Íê±ÏÖ®ºó²Å¿ÉÒÔµ÷Óã¬ÕâÑù¾Í±£Ö¤ÁËḬ̈߳²È«ÐÔ

£¨2£©CPUÖ´ÐдúÂ룬ִÐеIJ»ÊÇJava´úÂ룬ÕâµãºÜ¹Ø¼ü£¬Ò»¶¨µÃ¼Çס¡£Java´úÂë×îÖÕÊDZ»·­Òë³É»ã±à´úÂëÖ´Ðеģ¬»ã±à´úÂë²ÅÊÇÕæÕý¿ÉÒÔºÍÓ²¼þµç·½»»¥µÄ´úÂë¡£¼´Ê¹Äã¿´µ½Java´úÂëÖ»ÓÐÒ»ÐУ¬ÉõÖÁÄã¿´µ½Java´úÂë±àÒëÖ®ºóÉú³ÉµÄ×Ö½ÚÂëÒ²Ö»ÓÐÒ»ÐУ¬Ò²²»Òâζ×ŶÔÓڵײãÀ´ËµÕâ¾äÓï¾äµÄ²Ù×÷Ö»ÓÐÒ»¸ö¡£Ò»¾ä¡±return count¡±¼ÙÉè±»·­Òë³ÉÁËÈý¾ä»ã±àÓï¾äÖ´ÐУ¬ÍêÈ«¿ÉÄÜÖ´ÐÐÍêµÚÒ»¾ä£¬Ï߳̾ÍÇл»ÁË¡£

38¡¢Ïß³ÌÀàµÄ¹¹Ôì·½·¨¡¢¾²Ì¬¿éÊDZ»ÄĸöÏ̵߳÷ÓõÄ

ÕâÊÇÒ»¸ö·Ç³£µó×êºÍ½Æ»«µÄÎÊÌâ¡£Çë¼Çס£ºÏß³ÌÀàµÄ¹¹Ôì·½·¨¡¢¾²Ì¬¿éÊDZ»newÕâ¸öÏß³ÌÀàËùÔÚµÄÏß³ÌËùµ÷Óõģ¬¶ørun·½·¨ÀïÃæµÄ´úÂë²ÅÊDZ»Ïß³Ì×ÔÉíËùµ÷Óõġ£

Èç¹û˵ÉÏÃæµÄ˵·¨ÈÃÄã¸Ðµ½À§»ó£¬ÄÇôÎÒ¾Ù¸öÀý×Ó£¬¼ÙÉèThread2ÖÐnewÁËThread1£¬mainº¯ÊýÖÐnewÁËThread2£¬ÄÇô£º

£¨1£©Thread2µÄ¹¹Ôì·½·¨¡¢¾²Ì¬¿éÊÇmainÏ̵߳÷Óõģ¬Thread2µÄrun()·½·¨ÊÇThread2×Ô¼ºµ÷ÓõÄ

£¨2£©Thread1µÄ¹¹Ôì·½·¨¡¢¾²Ì¬¿éÊÇThread2µ÷Óõģ¬Thread1µÄrun()·½·¨ÊÇThread1×Ô¼ºµ÷ÓõÄ

39¡¢Í¬²½·½·¨ºÍͬ²½¿é£¬ÄĸöÊǸüºÃµÄÑ¡Ôñ

ͬ²½¿é£¬ÕâÒâζ×Åͬ²½¿éÖ®ÍâµÄ´úÂëÊÇÒì²½Ö´Ðеģ¬Õâ±Èͬ²½Õû¸ö·½·¨¸üÌáÉý´úÂëµÄЧÂÊ¡£ÇëÖªµÀÒ»ÌõÔ­Ôò£ºÍ¬²½µÄ·¶Î§Ô½ÉÙÔ½ºÃ¡£

½è×ÅÕâÒ»Ìõ£¬ÎÒ¶îÍâÌáÒ»µã£¬Ëä˵ͬ²½µÄ·¶Î§Ô½ÉÙÔ½ºÃ£¬µ«ÊÇÔÚJavaÐéÄâ»úÖл¹ÊÇ´æÔÚ×ÅÒ»ÖÖ½Ð×öËø´Ö»¯µÄÓÅ»¯·½·¨£¬ÕâÖÖ·½·¨¾ÍÊÇ°Ñͬ²½·¶Î§±ä´ó¡£ÕâÊÇÓÐÓõģ¬±È·½ËµStringBuffer£¬ËüÊÇÒ»¸öḬ̈߳²È«µÄÀ࣬×ÔÈ»×î³£ÓõÄappend()·½·¨ÊÇÒ»¸öͬ²½·½·¨£¬ÎÒÃÇд´úÂëµÄʱºò»á·´¸´append×Ö·û´®£¬ÕâÒâζ×ÅÒª½øÐз´¸´µÄ¼ÓËø->½âËø£¬Õâ¶ÔÐÔÄܲ»Àû£¬ÒòΪÕâÒâζ×ÅJavaÐéÄâ»úÔÚÕâÌõÏß³ÌÉÏÒª·´¸´µØÔÚÄÚºË̬ºÍÓû§Ì¬Ö®¼ä½øÐÐÇл»£¬Òò´ËJavaÐéÄâ»ú»á½«¶à´Îappend·½·¨µ÷ÓõĴúÂë½øÐÐÒ»¸öËø´Ö»¯µÄ²Ù×÷£¬½«¶à´ÎµÄappendµÄ²Ù×÷À©Õ¹µ½append·½·¨µÄͷ⣬±ä³ÉÒ»¸ö´óµÄͬ²½¿é£¬ÕâÑù¾Í¼õÉÙÁ˼ÓËø¨C>½âËøµÄ´ÎÊý£¬ÓÐЧµØÌáÉýÁË´úÂëÖ´ÐеÄЧÂÊ¡£

40¡¢¸ß²¢·¢¡¢ÈÎÎñÖ´ÐÐʱ¼ä¶ÌµÄÒµÎñÔõÑùʹÓÃÏ̳߳أ¿²¢·¢²»¸ß¡¢ÈÎÎñÖ´ÐÐʱ¼ä³¤µÄÒµÎñÔõÑùʹÓÃÏ̳߳أ¿²¢·¢¸ß¡¢ÒµÎñÖ´ÐÐʱ¼ä³¤µÄÒµÎñÔõÑùʹÓÃÏ̳߳أ¿

ÕâÊÇÎÒÔÚ²¢·¢±à³ÌÍøÉÏ¿´µ½µÄÒ»¸öÎÊÌ⣬°ÑÕâ¸öÎÊÌâ·ÅÔÚ×îºóÒ»¸ö£¬Ï£Íûÿ¸öÈ˶¼ÄÜ¿´µ½²¢ÇÒ˼¿¼Ò»Ï£¬ÒòΪÕâ¸öÎÊÌâ·Ç³£ºÃ¡¢·Ç³£Êµ¼Ê¡¢·Ç³£×¨Òµ¡£¹ØÓÚÕâ¸öÎÊÌ⣬¸öÈË¿´·¨ÊÇ£º

£¨1£©¸ß²¢·¢¡¢ÈÎÎñÖ´ÐÐʱ¼ä¶ÌµÄÒµÎñ£¬Ï̳߳ØÏß³ÌÊý¿ÉÒÔÉèÖÃΪCPUºËÊý+1£¬¼õÉÙÏß³ÌÉÏÏÂÎĵÄÇл»

£¨2£©²¢·¢²»¸ß¡¢ÈÎÎñÖ´ÐÐʱ¼ä³¤µÄÒµÎñÒªÇø·Ö¿ª¿´£º

a£©¼ÙÈçÊÇÒµÎñʱ¼ä³¤¼¯ÖÐÔÚIO²Ù×÷ÉÏ£¬Ò²¾ÍÊÇIOÃܼ¯Ð͵ÄÈÎÎñ£¬ÒòΪIO²Ù×÷²¢²»Õ¼ÓÃCPU£¬ËùÒÔ²»ÒªÈÃËùÓеÄCPUÏÐÏÂÀ´£¬¿ÉÒÔ¼Ó´óÏ̳߳ØÖеÄÏß³ÌÊýÄ¿£¬ÈÃCPU´¦Àí¸ü¶àµÄÒµÎñ

b£©¼ÙÈçÊÇÒµÎñʱ¼ä³¤¼¯ÖÐÔÚ¼ÆËã²Ù×÷ÉÏ£¬Ò²¾ÍÊǼÆËãÃܼ¯ÐÍÈÎÎñ£¬Õâ¸ö¾Íû°ì·¨ÁË£¬ºÍ£¨1£©Ò»Ñù°É£¬Ï̳߳ØÖеÄÏß³ÌÊýÉèÖõÃÉÙһЩ£¬¼õÉÙÏß³ÌÉÏÏÂÎĵÄÇл»

£¨3£©²¢·¢¸ß¡¢ÒµÎñÖ´ÐÐʱ¼ä³¤£¬½â¾öÕâÖÖÀàÐÍÈÎÎñµÄ¹Ø¼ü²»ÔÚÓÚÏ̳߳ضøÔÚÓÚÕûÌå¼Ü¹¹µÄÉè¼Æ£¬¿´¿´ÕâЩҵÎñÀïÃæijЩÊý¾ÝÊÇ·ñÄÜ×ö»º´æÊǵÚÒ»²½£¬Ôö¼Ó·þÎñÆ÷Êǵڶþ²½£¬ÖÁÓÚÏ̳߳صÄÉèÖã¬ÉèÖòο¼£¨2£©¡£×îºó£¬ÒµÎñÖ´ÐÐʱ¼ä³¤µÄÎÊÌ⣬Ҳ¿ÉÄÜÐèÒª·ÖÎöһϣ¬¿´¿´Äܲ»ÄÜʹÓÃÖмä¼þ¶ÔÈÎÎñ½øÐвð·ÖºÍ½âñî¡£

   
2550 ´Îä¯ÀÀ       20
Ïà¹ØÎÄÕÂ

Java΢·þÎñÐÂÉú´úÖ®Nacos
ÉîÈëÀí½âJavaÖеÄÈÝÆ÷
JavaÈÝÆ÷Ïê½â
Java´úÂëÖÊÁ¿¼ì²é¹¤¾ß¼°Ê¹Óð¸Àý
Ïà¹ØÎĵµ

JavaÐÔÄÜÓÅ»¯
Spring¿ò¼Ü
SSM¿ò¼Ü¼òµ¥¼òÉÜ
´ÓÁ㿪ʼѧjava±à³Ì¾­µä
Ïà¹Ø¿Î³Ì

¸ßÐÔÄÜJava±à³ÌÓëϵͳÐÔÄÜÓÅ»¯
JavaEE¼Ü¹¹¡¢ Éè¼Æģʽ¼°ÐÔÄܵ÷ÓÅ
Java±à³Ì»ù´¡µ½Ó¦Óÿª·¢
JAVAÐéÄâ»úÔ­ÀíÆÊÎö
×îл¼Æ»®
Node+Vue3.0Ç°¶ËÈ«Õ»¿ª·¢ 7-5 [ÌØ»Ý]
Spring Cloud΢·þÎñ¼Ü¹¹ 7-5[ÌØ»Ý]
SysMLºÍEAϵͳÉè¼ÆÓ뽨ģ 7-26[ÌØ»Ý]
Python¡¢Êý¾Ý·ÖÎöÓë»úÆ÷ѧϰ 8-23[ÌØ»Ý]
ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ 8-22[ÏßÉÏ]
LinuxÄں˱à³Ì¼°É豸Çý¶¯ 7-25[±±¾©]

Java ÖеÄÖÐÎıàÂëÎÊÌâ
Java»ù´¡ÖªÊ¶µÄÈýÊ®¸ö¾­µäÎÊ´ð
Íæת Java Web Ó¦Óÿª·¢
ʹÓÃSpring¸üºÃµØ´¦ÀíStruts
ÓÃEclipse¿ª·¢iPhone WebÓ¦ÓÃ
²å¼þϵͳ¿ò¼Ü·ÖÎö

Struts+Spring+Hibernate
»ùÓÚJ2EEµÄWeb 2.0Ó¦Óÿª·¢
J2EEÉè¼ÆģʽºÍÐÔÄܵ÷ÓÅ
Java EE 5ÆóÒµ¼¶¼Ü¹¹Éè¼Æ
Javaµ¥Ôª²âÊÔ·½·¨Óë¼¼Êõ
Java±à³Ì·½·¨Óë¼¼Êõ

Struts+Spring+Hibernate/EJB+ÐÔÄÜÓÅ»¯
»ªÏÄ»ù½ð ActiveMQ Ô­ÀíÓë¹ÜÀí
ijÃñº½¹«Ë¾ Java»ù´¡±à³Ìµ½Ó¦Óÿª·¢
ij·çµç¹«Ë¾ Java Ó¦Óÿª·¢Æ½Ì¨ÓëǨÒÆ
ÈÕÕÕ¸Û J2EEÓ¦Óÿª·¢¼¼Êõ¿ò¼ÜÓëʵ¼ù
ij¿ç¹ú¹«Ë¾ ¹¤×÷Á÷¹ÜÀíJBPM
¶«·½º½¿Õ¹«Ë¾ ¸ß¼¶J2EE¼°ÆäÇ°Ñؼ¼Êõ