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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
Java ²¢·¢Ñ§Ï°±Ê¼Ç×ܽá
 
À´Ô´£º¼äÊé ·¢²¼ÓÚ 2016-8-11
  2126  次浏览      27
 

²¢·¢

×î½üÖØÐ¸´Ï°ÁËÒ»±ß²¢·¢µÄ֪ʶ£¬·¢ÏÖ×Ô¼ºÖ®Ç°¶ÔÓÚ²¢·¢µÄÁ˽âÖ»ÊÇÆ¤Ã«¡£ÕâÀï×ܽáÒÔÏÂJava²¢·¢ÐèÒªÕÆÎյĵ㡣

ʹÓò¢·¢µÄÒ»¸öÖØÒªÔ­ÒòÊÇÌá¸ßÖ´ÐÐЧÂÊ¡£ÓÉÓÚI/OµÈÇé¿ö×èÈû£¬µ¥¸öÈÎÎñ²¢²»Äܳä·ÖÀûÓÃCPUʱ¼ä¡£ËùÒÔÔÚµ¥´¦ÀíÆ÷µÄ»úÆ÷ÉÏÒ²Ó¦¸ÃʹÓò¢·¢¡£

ΪÁËʵÏÖ²¢·¢£¬²Ù×÷ϵͳ²ãÃæÌṩÁË¶à½ø³Ì¡£µ«Êǽø³ÌµÄÊýÁ¿ºÍ¿ªÏú¶¼ÓÐÏÞÖÆ£¬²¢ÇÒ¶à¸ö½ø³ÌÖ®¼äµÄÊý¾Ý¹²Ïí±È½ÏÂé·³¡£ÁíÒ»ÖֱȽÏÇáÁ¿µÄ²¢·¢ÊµÏÖÊÇʹÓÃỊ̈߳¬Ò»¸ö½ø³Ì¿ÉÒÔ°üº¬¶à¸öÏ̡߳£Ïß³ÌÔÚ½ø³ÌÖÐûÓÐÊýÁ¿ÏÞÖÆ, Êý¾Ý¹²ÏíÏà¶Ô¼òµ¥¡£Ï̵߳ÄÖ§³Ö¸úÓïÑÔÊÇÓйØÏµµÄ¡£Java ÓïÑÔÖÐÖ§³Ö¶àÏ̡߳£

Java ÖеĶàÏß³ÌÊÇÇÀռʽµÄ¡£ÕâÒâζ×ÅÒ»¸öÈÎÎñËæÊ±¿ÉÄÜÖжϲ¢Çл»µ½ÆäËüÈÎÎñ¡£ËùÒÔÎÒÃÇÐèÒªÔÚ´úÂëÖÐ×ã¹»µÄ½÷É÷£¬·À·¶ºÃÕâÖÖÇл»´øÀ´µÄ¸±×÷Óá£

»ù´¡

RunnableËü¿ÉÒÔÀí½â³ÉÒ»¸öÈÎÎñ¡£ËüµÄrun()·½·¨¾ÍÊÇÈÎÎñµÄÂß¼­£¬Ö´ÐÐ˳Ðò¡£

ThreadËüÊÇÒ»¸öÈÎÎñµÄÔØÌ壬ÐéÄâ»úͨ¹ýËüÀ´·ÖÅäÈÎÎñÖ´ÐеÄʱ¼äƬ¡£

ThreadÖеÄstart·½·¨¿ÉÒÔ×÷Ϊһ¸ö²¢·¢ÈÎÎñµÄÈë¿Ú¡£²»Í¨¹ýstart·½·¨À´Ö´ÐÐÈÎÎñ£¬ÄÇôrun·½·¨¾ÍÖ»ÊÇÒ»¸öÆÕͨµÄ·½·¨

Ï̵߳Ä״̬ÓÐËÄÖÖ£º

NEW Ï̴߳´½¨µÄʱºò¶ÌÔݵĴ¦ÓÚÕâÖÖ״̬¡£ÕâÖÖ״̬ÏÂÒѾ­¿ÉÒÔ»ñµÃCPUʱ¼äÁË£¬Ëæºó¿ÉÄܽøÈëRUNNABLE£¬BLOCKED״̬¡£

RUNNABLE ´Ë״̬ÏÂÖ»ÒªCPU½«Ê±¼ä·ÖÅ䏸Ị̈߳¬Ïß³ÌÖеÄÈÎÎñ¾Í¿ÉÒÔÖ´ÐС£Ëæºó¿ÉÄܽøÈëBLOCKED£¬DEAD״̬¡£

BLOCKED Ï߳̿ÉÒÔÔËÐУ¬µ«ÊÇÓÐij¸öÌõ¼þ×èÖ¹×ÅËü¡£µ±Ï̴߳¦ÓÚ×èÈû״̬ʱ£¬CPU²»»á·ÖÅäʱ¼äƬ¸øËü£¬Ö±µ½ËüÖØÐ½øÈëRUNNABLE״̬¡£

DEAD ´Ë״̬µÄÏ߳̽«ÓÀÔ¶²»»á»ñµÃCPUʱ¼äƬ¡£Í¨³£ÊÇÒòΪrun()·½·¨·µ»Ø²Å»áµ½´ï´Ë״̬¡£´ËʱÈÎÎñ»¹ÊÇ¿ÉÒÔ±»Öжϵġ£

Callable<T>ËüÊÇÒ»¸ö´ø·µ»ØµÄÒì²½ÈÎÎñ£¬·µ»ØµÄ½á¹û·Åµ½Ò»¸öFuture¶ÔÏóÖС£

Future<T>Ëü¿ÉÒÔ½ÓÊÜCallableÈÎÎñµÄ·µ»Ø½á¹û¡£ÔÚÈÎÎñûÓзµ»ØµÄʱºòµ÷ÓÃget·½·¨»á×èÈûµ±Ç°Ï̡߳£cancel·½·¨»á³¢ÊÔÈ¡ÏûδÍê³ÉµÄÈÎÎñ£¨Î´Ö´ÐÐ->Ö±½Ó²»Ö´ÐУ¬ÒѾ­Íê³É->·µ»Øfalse,ÕýÔÚÖ´ÐÐ->³¢ÊÔÖжϣ©¡£

FutureTask<T>ͬʱ¼Ì³ÐÁËRunnable, Callable ½Ó¿Ú¡£

Java 1.5Ö®ºó£¬²»ÔÙÍÆ¼öÖ±½ÓʹÓÃThread¶ÔÏó×÷ΪÈÎÎñµÄÈë¿Ú¡£ÍƼöʹÓÃExecutor¹ÜÀíThread¶ÔÏó¡£ExecutorÊÇÏß³ÌÓëÈÎÎñÖ®¼äµÄµÄÒ»¸öÖмä²ã£¬ËüÆÁ±ÎÁËÏ̵߳ÄÉúÃüÖÜÆÚ£¬²»ÔÙÐèÒªÏÔʽµÄ¹ÜÀíÏ̡߳£²¢ÇÒThreadPoolExecutor ʵÏÖÁ˴˽ӿڣ¬ÎÒÃÇ¿ÉÒÔͨ¹ýËüÀ´ÀûÓÃÏ̳߳صÄÓŵ㡣

Ï̳߳ØÉæ¼°µ½µÄÀàÓУºExecutor,ExecutorService,ThreadExecutorPool,Executors,FixedThreadPool,CachedThreadPool,SingleThreadPool¡£

ExecutorÖ»ÓÐÒ»¸ö·½·¨£¬executeÀ´Ìá½»Ò»¸öÈÎÎñ

ExecutorServiceÌṩÁ˹ÜÀíÒì²½ÈÎÎñµÄ·½·¨£¬Ò²¿ÉÒÔ²úÉúÒ»¸öFuture¶ÔÏóÀ´¸ú×ÙÒ»¸öÒì²½ÈÎÎñ¡£

Ö÷ÒªµÄ·½·¨ÈçÏÂ:

submit¿ÉÒÔÌá½»Ò»¸öÈÎÎñ

shutdown¿ÉÒԾܾø½ÓÊÜÐÂÈÎÎñ

shutdownNow¿ÉÒԾܾøÐÂÈÎÎñ²¢ÏòÕýÔÚÖ´ÐеÄÈÎÎñ·¢³öÖжÏÐźÅ

invokeXXXÅúÁ¿Ö´ÐÐÈÎÎñ

ThreadPoolExecutorÏ̳߳صľßÌåʵÏÖÀà¡£Ï̳߳صĺô¦ÔÚÓÚÌá¸ßЧÂÊ£¬ÄܱÜÃâÆµ·±ÉêÇë/»ØÊÕÏ̴߳øÀ´µÄ¿ªÏú¡£

ËüµÄʹÓ÷½·¨¸´ÔÓһЩ£¬¹¹ÔìÏ̳߳صĿÉÑ¡²ÎÊýÓÐ:

corePoolSize : int ¹¤×÷µÄWorkerµÄÊýÁ¿¡£

maximumPoolSize : int Ï̳߳ØÖгÖÓеÄWorkerµÄ×î´óÊýÁ¿

keepAliveTime : long µ±³¬¹ýWorkderµÄÊýÁ¿corePoolSizeµÄʱºò£¬Èç¹ûûÓÐеÄÈÎÎñÌá½»£¬³¬¹ýcorePoolSizeµÄWorkerµÄ×µÈ´ýʱ¼ä¡£³¬¹ýÕâ¸öʱ¼äÖ®ºó£¬Ò»²¿·ÖWorker½«±»»ØÊÕ¡£

unit : TimeUnit keepAliveTimeµÄµ¥Î»

workQueue : BlockingQueue »º´æÈÎÎñµÄ¶ÓÁÐ, Õâ¸ö¶ÓÁÐÖ»»º´æÌá½»µÄRunnableÈÎÎñ¡£

threadFactory : ThreadFactory ²úÉúÏ̵߳ġ°¹¤³§¡±

handler : RejectedExecutionHandler µ±Ò»¸öÈÎÎñ±»Ìá½»µÄʱºò£¬Èç¹ûËùÓÐWorker¶¼ÔÚ¹¤×÷²¢ÇÒ³¬¹ýÁË»º´æ¶ÓÁеÄÈÝÁ¿µÄʱºò¡£»á½»¸øÕâ¸öHandler´¦Àí¡£Java ÖÐÌṩÁ˼¸ÖÖĬÈϵÄʵÏÖ£¬AbortPolicy, CallerRunsPolicy, DiscardOldestPolicy, DiscardPolicy¡£

ÕâÀïµÄWorker¿ÉÒÔÀí½âΪһ¸öÏ̡߳£

ÕâÀï֮ǰÏ벻ͨ£¬¾õµÃÏ̲߳»¿ÉÄÜÖØÐÂÀûÓðó¶¨ÐÂÈÎÎñ¡£¿´ÁËÏÂÔ´Âë·¢ÏÖÔ­À´È·Êµ²»ÊÇÖØÐ°ó¶¨ÈÎÎñ¡£Ã¿Ò»¸öWorkerµÄºËÐIJ¿·ÖÖ»ÊÇÒ»¸öÑ­»·£¬²»¶Ï´Ó»º´æ¶ÓÁÐÖÐÈ¡ÈÎÎñÖ´ÐС£ÕâÑù´ïµ½ÁËÖØÓõÄЧ¹û¡£

final void runWorker(Worker w) {
Runnable task = w.firstTask; // ... try { while(task != null || (task=getTask())!=null) { try{
task.run();
} catch(Exception e){
} // ... }
} finally { // ... } // ... }

ExecutorsÀàÌṩÁ˼¸ÖÖĬÈÏÏ̳߳صÄʵÏÖ·½Ê½¡£

CachedThreadExecutor¹¤×÷Ï̵߳ÄÊýÁ¿Ã»ÓÐÉÏÏÞ(IntegerµÄ×î´óÖµ), ÓÐÐèÒª¾Í´´½¨ÐÂÏ̡߳£

FixedThreadExecutorÔ¤ÏÈÒ»´Î·ÖÅä¹Ì¶¨ÊýÁ¿µÄỊ̈߳¬Ö®ºó²»ÔÙÐèÒª´´½¨ÐÂÏ̡߳£

SingleThreadExecutorÖ»ÓÐÒ»¸öÏ̵߳ÄÏ̳߳ء£Èç¹ûÌá½»Á˶à¸öÈÎÎñ£¬ÄÇôÕâЩÈËÎォÅŶӣ¬Ã¿¸öÈÎÎñ¶¼ÔÚÉÏÒ»¸öÈËÎïÖ´ÐÐÍêÖ®ºóÖ´ÐС£ËùÓÐÈÎÎñ¶¼Êǰ´ÕÕËüÃǵÄÌύ˳ÐòÖ´Ðеġ£

sleep(long)µ±Ç°Ïß³Ì ÖÐÖ¹ Ò»¶Îʱ¼ä¡£Ëü²»»áÊÍ·ÅËø¡£Java1.5Ö®ºóÌṩÁ˸ü¼ÓÁé»îµÄ°æ±¾¡£

TimeUnit¿ÉÒÔÖ¸¶¨Ë¯ÃßµÄʱ¼äµ¥Î»¡£

ÓÅÏȼ¶ ¾ø´ó¶àÊýÇé¿öÏÂÎÒÃǶ¼Ó¦¸ÃʹÓÃĬÈϵÄÓÅÏȼ¶¡£²»Í¬µÄÐéÄâ»úÖжÔÓ¦µÄÓÅÏȼ¶¼¶±ðµÄ×ÜÊý£¬Ò»°ãÓÃÈý¸ö¾Í¿ÉÒÔÁËMAX_PRIORITY,NORM_PRIORITY,MIN_PRIORITY¡£

Èò½ Thread.yield()½¨ÒéÏàͬÓÅÏȼ¶µÄÆäËüÏß³ÌÏÈÔËÐУ¬µ«ÊDz»±£Ö¤Ò»¶¨ÔËÐÐÆäËüÏ̡߳£

ºǫ́Ïß³Ì Ò»¸ö½ø³ÌÖеÄËùÓзǺǫ́Ï̶߳¼ÖÕÖ¹µÄʱºòÕû¸ö½ø³ÌÒ²¾ÍÖÕÖ¹£¬Í¬Ê±É±ËÀËùÓкǫ́Ï̡߳£ÓëÓÅÏȼ¶Ã»ÓÐʲô¹ØÏµ¡£

join() Ïß³Ì A ³ÖÓÐÏß³ÌT£¬µ±ÔÚÏß³ÌTµ÷ÓÃT.join()Ö®ºó£¬A»á×èÈû£¬Ö±µ½TµÄÈÎÎñ½áÊø¡£¿ÉÒÔ¼ÓÒ»¸ö³¬Ê±²ÎÊý£¬ÕâÑùÔÚ³¬Ê±Ö®ºóÏß³ÌA¿ÉÒÔ·ÅÆúµÈ´ý¼ÌÐøÖ´ÐÐÈÎÎñ¡£

²¶»ñÒì³£ ²»ÄÜ¿çÏ̲߳¶»ñÒì³£¡£±ÈÈç˵²»ÄÜÔÚmainÏß³ÌÖÐÌí¼Ótry-catch¿éÀ´²¶»ñÆäËüÏß³ÌÖÐÅ׳öµÄÒì³£¡£Ã¿Ò»¸öThread¶ÔÏ󶼿ÉÒÔÉèÖÃÒ»¸öUncaughtExceptionHandler¶ÔÏóÀ´´¦Àí±¾Ïß³ÌÖÐÅ׳öµÄÒì³£¡£Ï̳߳ØÖпÉÒÔͨ¹ý²ÎÊýThreadFactoryÀ´ÎªÃ¿Ò»¸öÏß³ÌÉèÖÃÒ»¸öUncaughtExceptionHandler¶ÔÏó¡£

·ÃÎʹ²Ïí×ÊÔ´

ÔÚ´¦Àí²¢·¢µÄʱºò£¬½«±äÁ¿ÉèÖÃΪprivate·Ç³£µÄÖØÒª£¬Õâ¿ÉÒÔ·ÀÖ¹ÆäËüÏß³ÌÖ±½Ó·ÃÎʱäÁ¿¡£

synchronizedÐÞÊη½·¨ÔÚ²»¼Ó²ÎÊýÇé¿öÏ£¬Ê¹ÓöÔÏó±¾Éí×÷ÎªËø¡£¾²Ì¬·½·¨Ê¹ÓÃClass¶ÔÏó×÷ÎªËø¡£Í¬Ò»¸öÈÎÎñ¿ÉÒÔ¶à´Î»ñµÃ¶ÔÏóËø¡£

ÏÔÊ½Ëø Lock£¬Ïà±Èsynchronized¸ü¼ÓÁé»î¡£µ«ÊÇÐèÒªµÄ´úÂë¸ü¶à£¬±àд³ö´íµÄ¿ÉÄÜÐÔÒ²¸ü¸ß¡£Ö»ÓÐÔÚ½â¾öÌØÊâÎÊÌâ»òÕßÌá¸ßЧÂʵÄʱºò²ÅÓÃËü¡£

Ô­×ÓÐÔ Ô­×Ó²Ù×÷¾ÍÊÇÓÀÔ¶²»»á±»Ïß³ÌÇл»ÖжϵIJÙ×÷¡£ºÜ¶à¿´ËÆÔ­×ӵIJÙ×÷¶¼ÊÇ·ÇÔ­×ӵ쬱ÈÈç˵long,doubleÊÇÓÉÁ½¸öbyte±íʾµÄ£¬ËüÃǵÄËùÓвÙ×÷¶¼ÊÇ·ÇÔ­×ӵġ£ËùÒÔ£¬Éæ¼°µ½²¢·¢Òì³£µÄµØ·½¶¼¼ÓÉÏͬ²½°É¡£³ý·ÇÄã¶ÔÐéÄâ»úÊ®·ÖµÄÁ˽⡣

volatile Õâ¸ö¹Ø¼ü×ÖµÄ×÷ÓÃÔÚÓÚ·ÀÖ¹¶àÏ̻߳·¾³Ï¶ÁÈ¡±äÁ¿µÄÔàÊý¾Ý¡£Õâ¸ö¹Ø¼ü×ÖÔÚcÓïÑÔÖÐÒ²ÓУ¬×÷ÓÃÊÇÏàͬµÄ¡£

Ô­×ÓÀà AtomicXXXÀ࣬ËüÃÇÄܹ»±£Ö¤¶ÔÊý¾ÝµÄ²Ù×÷ÊÇÂú×ãÔ­×ÓÐԵġ£ÕâЩÀà¿ÉÒÔÓÃÀ´ÓÅ»¯¶àÏ̵߳ÄÖ´ÐÐЧÂÊ£¬¼õÉÙËøµÄʹÓá£È»¶ø£¬Ê¹ÓÃÄѶȻ¹ÊDZȽϸߵġ£

ÁÙ½çÇø synchronized¹Ø¼ü×ÖµÄÓ÷¨¡£²»ÊÇÐÞÊÎÕû¸ö·½·¨£¬¶øÊÇÐÞÊÎÒ»¸ö´úÂë¿é¡£ËüµÄ×÷ÓÃÔÚÓÚ¾¡Á¿ÀûÓò¢·¢µÄЧÂÊ£¬¼õÉÙͬ²½¿ØÖƵÄÇøÓò¡£

ThreadLocal Õâ¸ö¸ÅÄîÓëͬ²½µÄ¸ÅÄͬ¡£ËüÊǸøÃ¿Ò»¸öÏ̶߳¼´´½¨Ò»¸ö±äÁ¿µÄ¸±±¾£¬²¢±£³Ö¸±±¾Ö®¼äÏ໥¶ÀÁ¢£¬»¥²»¸ÉÈÅ¡£ËùÒÔ¸÷¸öÏ̲߳Ù×÷×Ô¼ºµÄ¸±±¾£¬²»»á²úÉú³åÍ»¡£

ÖÕ½áÈÎÎñ

ÕâÀïÎÒ½²Ò»ÏÂ×Ô¼ºµ±Ç°µÄÀí½â¡£

Ò»¸öÏ̲߳»ÊÇ¿ÉÒÔËæ±ãÖжϵġ£¼´Ê¹ÎÒÃǸøÏß³ÌÉèÖÃÁËÖжÏ״̬£¬ËüÒ²»¹ÊÇ¿ÉÒÔ»ñµÃCPUʱ¼äƬµÄ¡£Ö»ÓÐÒòΪsleep()·½·¨¶ø×èÈûµÄÏ߳̿ÉÒÔÁ¢¼´ÊÕµ½InterruptedExceptionÒì³££¬ËùÒÔÔÚsleepÖжÏÈÎÎñµÄÇé¿öÏ¿ÉÒÔÖ±½ÓʹÓÃtry-catchÌø³öÈÎÎñ¡£ÆäËüÇé¿öÏ£¬¾ùÐèҪͨ¹ýÅжÏÏß³Ì״̬À´ÅжÏÊÇ·ñÐèÒªÌø³öÈÎÎñ(Thread.interrupted()·½·¨)¡£

synchronized·½·¨ÐÞÊεĴúÂë²»»áÔÚÊÕµ½ÖжÏÐźźóÁ¢¼´Öжϡ£ReentrantLockËø¿ØÖƵÄͬ²½´úÂë¿ÉÒÔͨ¹ýInterruptExceptionÖжϡ£

Thread.interrupted·½·¨µ÷ÓÃÒ»´ÎÖ®ºó»áÁ¢¼´Çå¿ÕÖжÏ״̬¡£¿ÉÒÔ×Ô¼ºÓñäÁ¿±£´æ×´Ì¬¡£

Ïß³ÌЭ×÷

wait/notifyAll wait/notifyAllÊÇObjectÀàÖеķ½·¨¡£µ÷ÓÃwait/notifyAll·½·¨µÄ¶ÔÏóÊÇ»¥³â¶ÔÏó¡£ÒòΪJavaÖÐËùÓеÄObject¶¼¿ÉÒÔ×ö»¥³âÁ¿(synchronized¹Ø¼ü×ֵIJÎÊý),ËùÒÔwait/notify·½·¨ÊÇÔÚObjectÀàÖеġ£

waitÓësleep ²»Í¬ÔÚÓÚsleep·½·¨ÊÇThreadÀàÖеķ½·¨£¬µ÷ÓÃËüµÄʱºò²»»áÊÍ·ÅËø£»wait·½·¨ÊÇObjectÀàÖеķ½·¨£¬µ÷ÓÃËüµÄʱºò»áÊÍ·ÅËø¡£

µ÷ÓÃwait·½·¨Ö®Ç°£¬µ±Ç°Ï̱߳ØÐë³ÖÓÐÕâ¶ÎÂß¼­µÄËø¡£·ñÔò»áÅ׳öÒì³££¬²»ÄܼÌÐøÖ´ÐС£

wait·½·¨¿ÉÒÔ½«µ±Ç°Ï̷߳ÅÈëµÈ´ý¼¯ºÏÖУ¬²¢Êͷŵ±Ç°Ï̳߳ÖÓеÄËø¡£´Ëºó£¬¸ÃÏ̲߳»»á½ÓÊÕµ½CPUµÄµ÷¶È£¬²¢½øÈëÐÝÃß״̬¡£ÓÐËÄÖÖÇé¿ö¿ÏÄÜ´òÆÆÕâÖÖ״̬£º

ÓÐÆäËüÏß³ÌÔÚ´Ë»¥³â¶ÔÏóÉϵ÷ÓÃÁËnotify·½·¨£¬²¢ÇÒ¸ÕºÃÑ¡ÖÐÁËÕâ¸öÏ̱߳»»½ÐÑ£»

ÓÐÆäËüÏß³ÌÔÚ´Ë»¥³â¶ÔÏóÉϵ÷ÓÃÁËnotifyAll·½·¨£»

ÆäËüÏß³ÌÏò´ËÏ̷߳¢³öÁËÖжÏÐźţ»

µÈ´ýʱ¼ä³¬¹ýÁ˲ÎÊýÉèÖõÄʱ¼ä¡£

Ïß³ÌÒ»µ©±»»½ÐÑÖ®ºó£¬Ëü»áÏñÕý³£Ïß³ÌÒ»ÑùµÈ´ý֮ǰ³ÖÓеÄËùÓÐËø¡£Ö±µ½»Ö¸´µ½wait·½·¨µ÷ÓÃ֮ǰµÄ״̬¡£

»¹ÓÐÒ»ÖÖ²»³£¼ûµÄÇé¿ö£¬spurious wakeup(Ðé¼Ù»½ÐÑ)¡£¾ÍÊÇÔÚûÓÐnotify£¬notifyAll£¬interruptµÄʱºòÏß³Ì×Ô¶¯ÐÑÀ´¡£²éÁËһЩ×ÊÁϲ¢Ã»ÓÐŪÇå³þÊÇΪʲô¡£²»¹ýΪÁË·ÀÖ¹ÕâÖÖÏÖÏó£¬ÎÒÃÇÒªÔÚwaitµÄÌõ¼þÉϼÓÒ»²ãÑ­»·¡£

µ±Ò»¸öÏ̵߳÷ÓÃwait·½·¨Ö®ºó£¬ÆäËüÏ̵߳÷ÓøÃÏ̵߳Äinterrupt·½·¨¡£¸ÃÏ̻߳ỽÐÑ£¬²¢³¢ÊÔ»Ö¸´Ö®Ç°µÄ״̬¡£µ±×´Ì¬»Ö¸´Ö®ºó£¬¸ÃÏ̻߳áÅ׳öÒ»¸öÒì³£¡£

notify »½ÐÑÒ»¸öµÈ´ý´Ë¶ÔÏóµÄÏ̡߳£

notifyAll »½ÐÑËùÓеȴý´Ë¶ÔÏóµÄÏ̡߳£

´íʧµÄÐźÅ

µ±Á½¸öÏß³ÌʹÓÃnotify/wait»òÕßnotifyAll/wait½øÐÐЭ×÷µÄʱºò£¬²»Ç¡µ±µÄʹÓÃËüÃÇ¿ÉÄܻᵼÖÂһЩÐźŶªÊ§¡£Àý×Ó£º

T1: synchronized(shareMonitor){ // set up condition for T2 shareMonitor.notify();
}

T2: while(someCondition){ // Point 1 synchronized(shareMonitor){
shareMonitor.wait();
}
}

ÐźŶªÊ§ÊÇÕâÑù·¢ÉúµÄ£º

µ±T2Ö´Ðе½Point1µÄʱºò£¬Ï̵߳÷¶ÈÆ÷½«¹¤×÷Ï̴߳ÓT2Çл»µ½T1¡£T1Íê³ÉT2Ìõ¼þµÄÉèÖù¤×÷Ö®ºó£¬Ï̵߳÷¶ÈÆ÷½«¹¤×÷Ï̴߳ÓT1Çл»»ØT2¡£ËäÈ»T2Ï̵߳ȴýµÄÌõ¼þÒѾ­Âú×㣬µ«»¹Êǻᱻ¹ÒÆð¡£

½â¾öµÄ·½·¨±È½Ï¼òµ¥£º

T2: synchronized(sharedMonitor) { while(someCondition) {
sharedMonitor.wait();
}
}

½«¾ºÕùÌõ¼þ·Åµ½whileÑ­»·µÄÍâÃæ¼´¿É¡£ÔÚ½øÈëwhileÑ­»·Ö®ºó£¬ÔÚûÓе÷ÓÃwait·½·¨ÊÍ·ÅËøÖ®Ç°£¬½«²»»á½øÈëµ½T1Ïß³ÌÔì³ÉÐźŶªÊ§¡£

notify & notifyAll Ç°ÃæÒѾ­Ìá¹ýÕâÁ½¸ö·½·¨µÄÇø±ð¡£notifyÊÇËæ»ú»½ÐÑÒ»¸öµÈ´ý´ËËøµÄỊ̈߳¬notifyAllÊÇ»½ÐÑËùÓеȴý´ËËøµÄÏ̡߳£

Condition ËûÊÇconcurrentÀà¿âÖÐÏÔʽµÄ¹ÒÆð/»½ÐÑÈÎÎñµÄ¹¤¾ß¡£ËüÊÇÕæÕýµÄËø(Lock)¶ÔÏó²úÉúµÄÒ»¸ö¶ÔÏ󡣯äʵÓ÷¨¸úwait/notifyÊÇÒ»Öµġ£await¹ÒÆðÈÎÎñ£¬signalAll()»½ÐÑÈÎÎñ¡£

Éú²úÕßÏû·ÑÕß¶ÓÁÐ JavaÖÐÌṩÁËÒ»Öַdz£¼ò±ãµÄÈÝÆ÷£¬BlockingQueue¡£ÒѾ­°ïÄãдºÃÁË×èÈûʽµÄ¶ÓÁС£

³ýÁËBlockingQueue£¬Ê¹ÓÃPipedWriter/PipedReaderÒ²¿ÉÒÔ·½±ãµÄÔÚÏß³ÌÖ®¼ä´«µÝÊý¾Ý¡£

ËÀËø

ËÀËøÓÐËĸö±ØÒªÌõ¼þ£¬´òÆÆÒ»¸ö¼´¿ÉÈ¥³ýËÀËø¡£

Ëĸö±ØÒªÌõ¼þ£º

»¥³âÌõ¼þ¡£ »¥³âÌõ¼þ£ºÒ»¸ö×ÊԴÿ´ÎÖ»Äܱ»Ò»¸ö½ø³ÌʹÓá£

ÇëÇóÓë±£³ÖÌõ¼þ£ºÒ»¸öÏß³ÌÒòÇëÇó×ÊÔ´¶ø×èÈûʱ£¬¶ÔÒÑ»ñµÃµÄ×ÊÔ´±£³Ö²»·Å¡£

²»°þ¶áÌõ¼þ:Ïß³ÌÒÑ»ñµÃµÄ×ÊÔ´£¬ÔÚĩʹÓÃÍê֮ǰ£¬²»ÄÜÇ¿Ðаþ¶á¡£

Ñ­»·µÈ´ýÌõ¼þ:Èô¸ÉÏß³ÌÖ®¼äÐγÉÒ»ÖÖͷβÏà½ÓµÄÑ­»·µÈ´ý×ÊÔ´¹ØÏµ¡£

±¾À´×Ô¼º·­Ò룬µ«·¢ÏÖ°Ù¶ÈÉÏÃèÊöµÄ¸üºÃһЩ£¬Ö±½Ócopyµ½ÕâÀïÀ´£¬²¢°Ñ½ø³Ì»»³ÉÁËÏ̡߳£

ÆäËü¹¤¾ß

CountDownLatchͬ²½¶à¸öÈÎÎñ£¬Ç¿ÖƵȴýÆäËüÈÎÎñÍê³É¡£ËüÓÐÁ½¸öÖØÒª·½·¨countDown,awaitÒÔ¼°¹¹Ôìʱ´«ÈëµÄ²ÎÊýSIZE¡£µ±Ò»¸öÏ̵߳÷ÓÃawait·½·¨µÄʱºò»á¹ÒÆð£¬Ö±µ½¸Ã¶ÔÏóÊÕµ½SIZE´ÎcountDown¡£Ò»¸ö¶ÔÏóÖ»ÄÜʹÓÃÒ»´Î¡£

CyclicBarrierÒ²ÊÇÓÐÒ»¸öSIZE²ÎÊý¡£µ±ÓÐSIZE¸öÏ̵߳÷ÓÃawaitµÄʱºò£¬È«²¿Ï̶߳¼»á±»»½ÐÑ¡£¿ÉÒÔÀí½âΪËùÓÐÔ˶¯Ô±¾Íλºó²ÅÄÜÆðÅÜ£¬Ôç¾ÍλµÄÔ˶¯Ô±Ö»ÄÜ¹ÒÆðµÈ´ý¡£Ëü¿ÉÒÔÖØ¸´ÀûÓá£

DelayQueueÒ»¸öÎÞ½çµÄBlockingQueue£¬ÓÃÀ´·ÅÖÃʵÏÖÁËDelay½Ó¿ÚµÄ¶ÔÏó£¬ÔÚ¶ÓÁÐÖеĶÔÏóÖ»ÓÐÔÚµ½ÆÚÖ®ºó²ÅÄܱ»È¡×ß¡£Èç¹ûûÓÐÈκζÔÏóµ½ÆÚ£¬¾ÍûÓÐÍ·ÔªËØ¡£

PriorityBlockingQueueÒ»ÖÖ×Ô´øÓÅÏȼ¶µÄ×èÈûʽ¶ÓÁС£

ScheduledExecutor¿ÉÒÔ°ÑËüÏëÏó³ÉÒ»ÖÖÏ̳߳ØÊ½µÄTimer, TimerTask¡£

Semaphore»¥³âËøÖ»ÔÊÐíÒ»¸öÏ̷߳ÃÎÊ×ÊÔ´£¬µ«ÊÇSemaphoreÔÊÐíSIZE¸öÏß³Ìͬʱ·ÃÎÊ×ÊÔ´¡£

ExchangerÉú²úÕßÏû·ÑÕßÎÊÌâµÄÌØÊâ°æ¡£Á½¸öÏ߳̿ÉÒÔÔÚ¶¼¡®×¼±¸ºÃÁË¡¯Ö®ºó½»»»Ò»¸ö¶ÔÏóµÄ¿ØÖÆÈ¨¡£

ReadWriteLock¶ÁÐ´Ëø¡£ ¶Á-¶Á²»»¥³â£¬¶Á-д»¥³â£¬Ð´-д»¥³â¡£

 

   
2126 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

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

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

¸ßÐÔÄÜJava±à³ÌÓëϵͳÐÔÄÜÓÅ»¯
JavaEE¼Ü¹¹¡¢ Éè¼ÆÄ£Ê½¼°ÐÔÄܵ÷ÓÅ
Java±à³Ì»ù´¡µ½Ó¦Óÿª·¢
JAVAÐéÄâ»úÔ­ÀíÆÊÎö
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

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¼°ÆäÇ°ÑØ¼¼Êõ