ÉèΪÊ×Ò³ ¼ÓÈëÊÕ²Ø

TOP

Java+Threads+¶àÏ̲߳ο¼ÊÖ²á(Ò»)
2014-11-24 12:46:51 À´Ô´: ×÷Õß: ¡¾´ó ÖРС¡¿ ä¯ÀÀ:4´Î
Tags£ºJava Threads Ïß³Ì ²Î¿¼ ÊÖ²á

1 ͬ²½
ÈçºÎͬ²½¶à¸öÏ̶߳Թ²Ïí×ÊÔ´µÄ·ÃÎÊÊǶàÏ̱߳à³ÌÖÐ×î»ù±¾µÄÎÊÌâÖ®Ò»¡£µ±¶à¸öÏ̲߳¢·¢·ÃÎʹ²ÏíÊý¾Ýʱ»á³öÏÖÊý¾Ý´¦ÓÚ¼ÆËãÖмä״̬»òÕß²»Ò»ÖµÄÎÊÌ⣬´Ó¶øÓ°Ïìµ½³ÌÐòµÄÕýÈ·ÔËÐС£ÎÒÃÇͨ³£°ÑÕâÖÖÇé¿ö½Ð×ö¾ºÕùÌõ¼þ£¨race condition£©£¬°Ñ²¢·¢·ÃÎʹ²ÏíÊý¾ÝµÄ´úÂë½Ð×ö¹Ø¼üÇøÓò£¨critical section£©¡£Í¬²½¾ÍÊÇʹµÃ¶à¸öÏß³Ì˳Ðò½øÈë¹Ø¼üÇøÓò´Ó¶ø±ÜÃ⾺ÕùÌõ¼þµÄ·¢Éú¡£


1.1 Synchronized¹Ø¼ü×Ö
SynchronizedÊÇJava¶àÏ̱߳à³ÌÖÐ×î³£ÓõĹؼü×Ö¡£ËùÓеÄJava ¶ÔÏó¶¼ÓÐ×Ô¼ºÎ¨Ò»µÄÒþʽͬ²½Ëø¡£¸ÃËøÖ»ÄÜͬʱ±»Ò»¸öÏ̻߳ñµÃ£¬ÆäËûÊÔͼ»ñµÃ¸ÃËøµÄÏ̶߳¼»á±»×èÈûÔÚ¶ÔÏóµÄµÈ´ý¶ÓÁÐÖÐÖ±µ½»ñµÃ¸ÃËøµÄÏß³ÌÊÍ·ÅËø²ÅÄܼÌÐø¹¤×÷¡£Synchronized¹Ø¼ü×Öͨ³£ÓÐÁ½ÖÖÓ÷¨¡£µ±Synchronized¹Ø¼ü×ÖÓÃÓÚÀà·½·¨¶¨ÒåÖÐʱ£¬±íʾËùÓе÷Óø÷½·¨µÄÏ̶߳¼±ØÐë»ñµÃµ±Ç°¶ÔÏóµÄËø¡£ÕâÖÖ·½Ê½±È½Ï¼òµ¥£¬µ«ÊÇͬ²½µÄÁ£¶È±È½Ï´ó£¬µ±Ò»¸öÏß³ÌÒªÖ´ÐÐij¸ö¶ÔÏóµÄͬ²½·½·¨µÄʱºò£¬±ØÐëͬʱûÓÐÈÎºÎÆäËûÏß³ÌÔÚÖ´ÐиöÔÏóµÄÈÎһͬ²½·½·¨¡£´ËÍ⣬ͬ²½·½·¨ÖеÄËùÓдúÂë¾ùÔÚͬ²½¿éÖУ¬»ñµÃËøµÄÏ̱߳ØÐëÔÚÖ´ÐÐÍêËùÓеĴúÂëÀ뿪¸Ã·½·¨ºó²Å»áÊÍ·ÅËø£¬ÕâЩ´úÂëÖпÉÄÜÖ»ÓÐÒ»²¿·ÖÉæ¼°µ½¶Ô¹²Ïí×ÊÔ´£¨ÀýÈç³ÉÔ±±äÁ¿£©µÄ·ÃÎÊÐèҪͬ²½£¬ÆäÓàÔò²»ÐèÒª£¬ÄÇôÕâÑù´ÖÁ£¶ÈµÄͬ²½ÏÔÈ»Ôö¼ÓÁËÆäËûÏ̵߳ĵȴýʱ¼ä¡£SynchronizedµÄÁíÒ»ÖÖ Ó÷¨ÔÊÐí×÷ÓÃÔÚij¸ö¶ÔÏóÉÏ£¬²¢ÇÒֻͬ²½Ò»¶Î´úÂë¶ø²»ÊÇÕû¸ö·½·¨¡£



synchronized (object) {


// ÐèҪͬ²½µÄ´úÂë


}



ÕâÀïsynchronizedËù×÷ÓõĶÔÏó¿ÉÒÔÊÇÀàµÄij¸ö³ÉÔ±±äÁ¿£¬Ò²¿ÉÒÔÊÇÕâ¸öÀà¶ÔÏó£¨ÓÃthis±íʾ£©¡£ÕâÖÖÓ÷¨Ê¹µÃ³ÌÐòÔ±¿ÉÒÔ¸ù¾ÝÐèҪͬ²½²»Í¬µÄ³ÉÔ±±äÁ¿£¬¶ø²»×ÜÊǵ±Ç°Àà¶ÔÏó£¬Ìá¸ßÁËÁé»îÐÔ¡£


ÖµµÃÒ»ÌáµÄÊÇ£¬²¢²»ÊÇÖ»ÓжÔÏó²ÅÓÐËø£¬Àà±¾ÉíÒ²ÓÐ×Ô¼ºµÄËø£¬ÕâʹµÃstatic·½·¨Í¬Ñù¿ÉÒÔÓÃsynchronizedÀ´ÐÞÊΡ£·ÃÎÊͬ²½static·½·¨µÄÏß³ÌÐèÒª»ñµÃÀàµÄͬ²½Ëø²ÅÄܼÌÐøÖ´ÐС£


1.2 Volatile¹Ø¼ü×Ö
ÔÚJavaÄÚ´æÄ£ÐÍÖÐÿ¸öÏß³ÌÓµÓÐ×Ô¼ºµÄ±¾µØ´æ´¢(ÀýÈç¼Ä´æÆ÷)£¬²¢ÇÒÔÊÐíÏß³ÌÓµÓбäÁ¿ÖµµÄ¿½±´¡£ÕâʹµÃ±¾À´²»ÐèҪͬ²½µÄһЩԭ×Ó²Ù×÷£¬ÀýÈçboolean³ÉÔ±±äÁ¿´æ´¢ºÍ¶ÁȡҲ±äµÃ²»°²È«¡£ÉèÏëÎÒÃÇÓиö½Ð×ödoneµÄboolean³ÉÔ±±äÁ¿ºÍÒ»¸öµ±doneΪtrueʱ²Å»áÍ£Ö¹µÄÑ­»·£¬¸ÃÑ­»·Óɺǫ́Ïß³ÌÖ´ÐУ¬ÁíÒ»¸öUIÏ̵߳ȴýÓû§ÊäÈ룬Óû§°´ÏÂij¸ö°´Å¥ÒÔºó»á°ÑdoneÉè³Étrue´Ó¶øÖÕֹѭ»·¡£ÓÉÓÚUIÏß³Ì×Ô¼º±¾µØÓµÓÐdoneµÄ¿½±´£¬Óû§ÔÚ°´Ï°´Å¥Ê±Ö»ÊǰÑ×Ô¼º±¾µØµÄdoneÉè³ÉÁËtrue¶øÃ»Óм°Ê±¸üÐÂÖ÷ÄÚ´æÖеÄdone£¬ËùÒÔºǫ́Ïß³ÌÓÉÓÚ¿´²»µ½doneµÄ¸Ä±ä¶ø²»»áÖÕÖ¹¡£¼´Ê¹Ö÷ÄÚ´æÖеÄdone±ä»¯ÁË£¬ºǫ́Ïß³ÌÒ²»áÒòΪ×Ô¼º±¾µØµÄ±äÁ¿ÖµÃ»Óм°Ê±¸üжøÃ»Óвì¾õµ½doneµÄ±ä»¯¡£½â¾öÕâÒ»ÎÊÌâµÄ·½·¨Ö®Ò»ÊÇΪdoneÌṩsynchronizedµÄsetterºÍgetter·½·¨£¬ÕâÊÇÒòΪ»ñµÃͬ²½Ëø»áÆÈʹËùÓбäÁ¿µÄÖµ´ÓÁÙʱ´æ´¢(¼Ä´æÆ÷)д»áÖ÷ÄÚ´æ¡£³ý´ËÖ®Í⣬JavaÌṩÁËÒ»¸ö½â¾öÕâ¸öÎÊÌâ¸üΪÓÅÑŵķ½·¨£ºVolatile¹Ø¼ü×Ö¡£Ã¿´ÎʹÓÃvolatile±äÁ¿£¬JVM¶¼»á±£Ö¤´ÓÖ÷ÄÚ´æÖжÁÈ¡ËüµÄÖµ£»Í¬Ñùÿ´ÎÐÞ¸Ävolatile±äÁ¿£¬JVM¶¼»á°Ñֵд»Øµ½Ö÷ÄÚ´æÖС£


VolatileÊÊÓõij¡¾°±È½ÏÑϸñ£¬±ØÐëºÜÇå³þµØ¿´µ½volatileÖ»ÊǸæËßJVM¶ÔÓڸñäÁ¿µÄ¶Áд±ØÐëÿ´Î¶¼ÔÚÖ÷ÄÚ´æÖнøÐжø½ûֹʹÓÃÁÙʱµÄ¿½±´À´ÓÅ»¯£¬ËüÖ»ÊdzöÓÚJVMÌØÊâµÄÄÚ´æÄ£Ð͵ÄÐèÒª£¬²¢Ã»ÓÐͬ²½µÄ¹¦ÄÜ¡£Òò´ËÖ»ÓжÔvolatile±äÁ¿½øÐеÄÔ­×Ó²Ù×÷£¨¶ÁÈ¡ºÍ¸³Öµ£©²ÅÊÇḬ̈߳²È«µÄ£¬Ïñ×ÔÔö++×Ô¼õ--ÕâÑù°üº¬¶à¸öÃüÁîµÄ²Ù×÷ÈÔÈ»ÐèÒªÆäËüµÄͬ²½´ëÊ©¡£


ÁíÒ»¸öÐèҪעÒâµÄµÄµØ·½Êǵ±ÓÃvolatileÐÞÊÎÊý×éµÄʱºò£¬ËüÖ»ÊÇ˵Êý×éµÄÒýÓÃÊÇvolatileµÄ£¬¶øÊý×éÖеÄÔªËØ»¹ÊÇºÍÆÕͨ±äÁ¿Ò»Ñù£¬¿ÉÄܱ»JVMÓÅ»¯£¬ÎÒÃÇÎÞ·¨ÎªÊý×éÖеÄÔªËØ¼ÓÉÏvolatileÐÞÊΡ£½â¾öÉÏÊöÎÊÌâµÄ·½·¨ÊÇʹÓÃAtomic±äÁ¿¡£×÷ΪʹÓÃvolatileÐÞÊÎÊý×éµÄÒ»¸öÀý×Ó£¬¿ÉÒԲο¼java.util.concurrent.CopyOnWriteArrayList¡£ËüµÄadd²Ù×÷ÊÇͨ¹ý¸´ÖÆÔ­À´µÄÊý×é²¢°ÑÐÂÔªËØÌí¼Óµ½ÐÂÊý×éĩβȻºóÔÙ°ÑÄÚ²¿Êý×éÒýÓñäÁ¿Ö¸ÏòÐÂÊý×éÀ´ÊµÏֵģ¬Òò´ËÊý×é±äÁ¿¾­³£»á±»Ð޸ģ¬ÐèҪʹÓÃvolatile¡£


1.3 ÏÔÊ½ËøLock
¾¡¹Üsynchronized¹Ø¼ü×Ö¿ÉÒÔ½â¾ö´ó¶àÊýͬ²½ÎÊÌ⣬J2SE5.0»¹ÊÇÒýÈëÁËLock½Ó¿Ú¡£Ïà±ÈʹÓÃsynchronized¹Ø¼ü×Ö»ñÈ¡¶ÔÏóÒþʽµÄͬ²½Ëø£¬ÎÒÃdzÆLockΪÏÔÊ½Ëø¡£Ê¹ÓÃÏÔÊ½ËøµÄÒ»¸öÏÔ¶øÒ×¼ûµÄºÃ´¦ÊÇËü²»ÔÙÊôÓÚij¸ö¶ÔÏ󣬴Ӷø¿ÉÒÔÔÚ¶à¸ö¶ÔÏóÖ®¼ä¹²ÏíËü¡£Lock½Ó¿ÚÓÐlock()ºÍunlock()Á½¸ö·½·¨£¬Ê¹ÓÃËüÃǺÍʹÓÃsynchronized¹Ø¼ü×ÖÀàËÆ£¬ÔÚ½øÈëÐèҪͬ²½µÄ´úÂë֮ǰµ÷ÓÃlock£¬ÔÚÀ뿪ͬ²½´úÂë¿éʱµ÷ÓÃunlock¡£Í¨³£unlock»á±»·ÅÔÚfinallyÖÐÒÔ±£Ö¤¼´Ê¹Í¬²½´úÂë¿éÖÐÓÐÒì³£·¢Éú£¬ËøÈÔÈ»¿ÉÒÔ±»ÊÍ·Å¡£


ºÍʹÓÃsynchronized¹Ø¼ü×ÖºÍlock()·½·¨×ÜÊǰÑδÄÜ»ñµÃËøµÄÏß³Ì×èÈû²»Í¬£¬Lock½Ó¿Ú»¹ÌṩÁË·Ç×èÈûµÄtryLock()·½·¨¡£µ÷ÓÃtryLock·½·¨µÄÏß³ÌÈç¹ûδÄÜ»ñµÃËø»áÁ¢¿Ì·µ»Øfalse£¬Ï߳̿ÉÒÔ¼ÌÐøÖ´ÐÐÆäËû´úÂë¶ø±ÜÃâµÈ´ý£¬ÕâΪ³ÌÐòÔ±ÌṩÁ˸ü¶à×ÔÓÉ¡£


Lock½Ó¿Ú»¹ÌṩÁËÒ»¸önewCondition () ·½·¨£¬Ëü·µ»ØÒ»¸öCondition¶ÔÏó¡£Condition¶ÔÏóµÄ×÷ÓúÍObjectÓÃÓÚÏß³Ì֪ͨµÄwait-notify»úÖÆÏàͬ¡£


1.4 ÐźÅÁ¿Semaphore
ÓÐʱºòÎÒÃÇÓжà¸öÏàͬµÄ¹²Ïí×ÊÔ´¿ÉÒÔͬʱ±»¶à¸öÏß³ÌʹÓá£ÎÒÃÇÏ£ÍûÔÚËøµÄ»ù´¡ÉϼÓÉÏÒ»¸ö¼ÆÊýÆ÷£¬¸ù¾Ý×ÊÔ´µÄ¸öÊýÀ´³õʼ»¯Õâ¸ö¼ÆÊýÆ÷£¬Ã¿´Î³É¹¦µÄlock²Ù×÷¶¼»áʹ¼ÆÊýÆ÷µÄÖµ¼õÈ¥1£¬Ö»Òª¼ÆÊýÆ÷µÄÖµ²»ÎªÁã¾Í±íʾ»¹ÓÐ×ÊÔ´¿ÉÒÔʹÓã¬lock²Ù×÷¾ÍÄܳɹ¦¡£Ã¿´Îunlock²Ù×÷¶¼»á¸øÕâ¸ö¼ÆÊýÆ÷¼Ó1¡£Ö»Óе±¼ÆÊýÆ÷µÄֵΪ0µÄʱºòlock²Ù×÷²Å»á×èÈûµ±Ç°Ï̡߳£Õâ¾ÍÊÇJavaÖеÄÐźÅÁ¿Semaphore¡£


SemaphoreÀàÌṩµÄ·½·¨ºÍLock½Ó¿Ú·Ç³£ÀàËÆ£¬µ±°ÑÐźÅÁ¿µÄ×ÊÔ´¸öÊýÉèÖóÉ1ʱ£¬ÐźÅÁ¿¾ÍÍË»¯ÎªÆÕͨµÄËø¡£


1.5 ¶ÁÐ´ËøReadWriteLock
¶Ô¹²Ïí×ÊÔ´µÄ·ÃÎÊͨ³£¿ÉÒÔ·ÖΪ¶ÁÈ¡ºÍдÈë¡£ÔÚÓÐЩӦÓó¡¾°ÖжÁÈ¡¿ÉÄÜÐèÒª»¨·Ñ½Ï³¤Ê±¼ä£¬ÎÒÃÇÐèҪʹÓû¥³âËøÀ´×èÖ¹²¢·¢µÄдÈë²Ù×÷ÒÔ±£Ö¤Êý¾ÝµÄÒ»ÖÂÐÔ¡£µ«ÊǶÔÓÚ²¢·¢µÄ¶ÁÈ¡Ïß³ÌÆäʵ²¢²»ÐèҪʹÓÃͬ²½¡£ÊÂʵÉÏÖ»ÓÐʹÊý¾Ý·¢Éú±ä»¯µÄ²Ù×÷²ÅÐèҪͬ²½£¬ÎÒÃÇÏ£ÍûÓÐÒ»ÖÖ·½·¨¿ÉÒ԰ѶÁÈ¡ºÍдÈëÇø·Ö¿ªÀ´£¬¶ÁÈ¡ºÍдÈëµÄ²Ù×÷Ö®¼äÊÇ»¥³âµÄ£¬µ«ÊǶà¸ö¶ÁÈ¡²Ù×÷¿ÉÒÔͬʱ½øÐУ¬ÕâÑù¿ÉÒÔÓÐЧÌá¸ß¶ÁÈ¡Ãܼ¯ÐͳÌÐòµÄÐÔÄÜ¡£J2SE5.0ÌṩÁËReadWriteLock½Ó¿Ú²¢ÌṩÁËʵÏָýӿڵÄRe

Ê×Ò³ ÉÏÒ»Ò³ 1 2 ÏÂÒ»Ò³ βҳ 1/2/2
¡¾´ó ÖРС¡¿¡¾´òÓ¡¡¿ ¡¾·±Ìå¡¿¡¾Í¶¸å¡¿¡¾Êղء¿ ¡¾ÍƼö¡¿¡¾¾Ù±¨¡¿¡¾ÆÀÂÛ¡¿ ¡¾¹Ø±Õ¡¿ ¡¾·µ»Ø¶¥²¿¡¿
·ÖÏíµ½: 
ÉÏһƪ£ºiOS 5.1.1 ËøÆÁ½çÃæ(LockScreen).. ÏÂһƪ£ºAndroid¿ª·¢½Ì³Ì£ºÀ¶ÑÀ²âÊÔ

ÆÀÂÛ

ÕÊ¡¡¡¡ºÅ: ÃÜÂë: (ÐÂÓû§×¢²á)
Ñé Ö¤ Âë:
±í¡¡¡¡Çé:
ÄÚ¡¡¡¡ÈÝ:

¡¤Linuxϵͳ¼ò½é (2025-12-25 21:55:25)
¡¤Linux°²×°MySQL¹ý³Ì (2025-12-25 21:55:22)
¡¤Linuxϵͳ°²×°½Ì³Ì£¨ (2025-12-25 21:55:20)
¡¤HTTP Åc HTTPS µÄ²î„ (2025-12-25 21:19:45)
¡¤ÍøÕ¾°²È«±ØÐ޿ΣºÍ¼ (2025-12-25 21:19:42)