package Ġcom . blank j . sub util . util Ċ Ċ import Ġandroid . support . annotation . Int Def Ċ import Ġjava . util . concurrent .* Ċ Ċ /** Ċ Ġ* Ġ< pre > Ċ Ġ* Ġauthor : ĠBl ank j Ċ Ġ* Ġblog Ġ Ġ: Ġhttp :// blank j . com Ċ Ġ* Ġtime Ġ Ġ: Ġ 2 0 1 6 / 0 8 / 2 5 Ċ Ġ* Ġdesc Ġ Ġ: Ġ çº¿ç¨ĭ æ±ł çĽ¸åħ³ å·¥åħ· ç±» Ċ </ pre > Ġ* Ċ Ġ*/ Ċ class ĠThreadPool Utils Ġ{ ĊĠĠĠ Ġ@ Int Def ( Fixed Thread . to Long (), ĠCached Thread . to Long (), ĠSingle Thread . to Long ()) ĊĠĠĠ Ġ@ kotlin . annotation . Retention ( Annotation Retention . SOURCE ) ĊĠĠĠ Ġannotation Ġclass ĠType ĊĊĠĠĠ Ġprivate Ġvar Ġexec : ĠExecutor Service ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġschedule Exec : ĠScheduled ExecutorService ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪ¤æĸŃ çº¿ç¨ĭ æ±ł æĺ¯åĲ¦ å·² åħ³éĹŃ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġ` true `: Ġæĺ¯ < br ></ br >` false `: Ġ åĲ¦ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġis Shut Down : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġexec !!. is Shutdown ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åħ³éĹŃ çº¿ç¨ĭ æ±ł åĲİ åĪ¤æĸŃ æīĢæľī ä»»åĬ¡ æĺ¯åĲ¦ éĥ½ å·² å®ĮæĪĲ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ æ³¨æĦı ï¼Į éĻ¤ éĿŀ é¦ĸåħĪ è°ĥçĶ¨ Ġshutdown ĠæĪĸ Ġshutdown Now ï¼Į åĲ¦åĪĻ Ġis Terminated Ġæ ° ¸ ä¸į ä¸º Ġtrue ãĢĤ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġ` true `: Ġæĺ¯ < br ></ br >` false `: Ġ åĲ¦ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġis Terminated : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġexec !!. is Terminated ĊĊĊĠĠĠ Ġprivate Ġconstructor () Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠUnsupportedOperationException (" u Ġcan 't Ġinstantiate Ġme ...") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThreadPool Utils æŀĦéĢł åĩ½æķ° ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtype ĠĠĠĠĠĠĠĠ Ġ çº¿ç¨ĭ æ±ł ç±»åŀĭ ĊĠĠĠĠ Ġ* Ġ@ param Ġcore PoolSize Ġåıª å¯¹ Fixed åĴĮ Scheduled çº¿ç¨ĭ æ±ł èµ· æķĪ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor (@ Type Ġtype : ĠInt , Ġcore PoolSize : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ æŀĦéĢł æľī å®ļæĹ¶ åĬŁèĥ½ çļĦ çº¿ç¨ĭ æ±ł ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġnew ĠThreadPool Executor ( ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcore PoolSize , ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInteger . MAX _ VALUE , ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 L , ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTimeUnit . MILLISECONDS , ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew ĠDelay ed Work Queue () ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġ); ĊĠĠĠĠĠĠĠ Ġschedule Exec Ġ= ĠExec utors . new Scheduled ThreadPool ( core PoolSize ) ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ== ĠFixed Thread Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ æŀĦéĢł ä¸Ģä¸ª åĽºå®ļ çº¿ç¨ĭ æķ° çĽ®çļĦ çº¿ç¨ĭ æ±ł ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew ĠThreadPool Executor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcore PoolSize , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcore PoolSize , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTimeUnit . MILLISECONDS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew ĠLinked BlockingQueue < Runnable >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexec Ġ= ĠExec utors . new Fixed ThreadPool ( core PoolSize ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ== ĠSingle Thread Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ æŀĦéĢł ä¸Ģä¸ª åıª æĶ¯æĮģ ä¸Ģä¸ª çº¿ç¨ĭ çļĦ çº¿ç¨ĭ æ±ł , çĽ¸ å½ĵ äºİ new Fixed ThreadPool ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew ĠThreadPool Executor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTimeUnit . MILLISECONDS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew ĠLinked BlockingQueue < Runnable >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexec Ġ= ĠExec utors . new Single Thread Executor () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ== ĠCached Thread Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ æŀĦéĢł ä¸Ģä¸ª ç¼ĵ åĨ² åĬŁèĥ½ çļĦ çº¿ç¨ĭ æ±ł ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew ĠThreadPool Executor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInteger . MAX _ VALUE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 6 0 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTimeUnit . SECONDS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew ĠS ynchronous Queue < Runnable >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexec Ġ= ĠExec utors . new Cached ThreadPool () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġåľ¨ æľª æĿ¥ æŁĲä¸ª æĹ¶éĹ´ æī§è¡Į ç»Ļ å®ļçļĦ åĳ½ä»¤ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ è¯¥ åĳ½ä»¤ åı¯èĥ½ åľ¨ æĸ°çļĦ çº¿ç¨ĭ ãĢģ å·² åħ¥ æ±ł çļĦ çº¿ç¨ĭ æĪĸèĢħ æŃ£ è°ĥçĶ¨ çļĦ çº¿ç¨ĭ ä¸Ń æī§è¡Į ï¼Į è¿Ļ çĶ± ĠExecutor Ġ å®ŀçİ° åĨ³å®ļ ãĢĤ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcommand Ġåĳ½ä»¤ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġexecute ( command : ĠRunnable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġexec !!. execute ( command ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġåľ¨ æľª æĿ¥ æŁĲä¸ª æĹ¶éĹ´ æī§è¡Į ç»Ļ å®ļçļĦ åĳ½ä»¤ éĵ¾è¡¨ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ è¯¥ åĳ½ä»¤ åı¯èĥ½ åľ¨ æĸ°çļĦ çº¿ç¨ĭ ãĢģ å·² åħ¥ æ±ł çļĦ çº¿ç¨ĭ æĪĸèĢħ æŃ£ è°ĥçĶ¨ çļĦ çº¿ç¨ĭ ä¸Ń æī§è¡Į ï¼Į è¿Ļ çĶ± ĠExecutor Ġ å®ŀçİ° åĨ³å®ļ ãĢĤ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcommands Ġåĳ½ä»¤ éĵ¾è¡¨ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġexecute ( commands : ĠList < Runnable >) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( command Ġin Ġcommands ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexec !!. execute ( command ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ å¾ħ ä»¥ åīį æıĲäº¤ çļĦ ä»»åĬ¡ æī§è¡Į å®Į æ¯ķ åĲİ åħ³éĹŃ çº¿ç¨ĭ æ±ł ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ åĲ¯åĬ¨ ä¸Ģæ¬¡ é¡ºåºı åħ³éĹŃ ï¼Į æī§è¡Į ä»¥ åīį æıĲäº¤ çļĦ ä»»åĬ¡ ï¼Į ä½Ĩ ä¸į æİ¥åıĹ æĸ° ä»»åĬ¡ ãĢĤ ĊĠĠĠĠ Ġ* Ġå¦Ĥæŀľ å·²ç»ı åħ³éĹŃ ï¼Į åĪĻ è°ĥçĶ¨ æ²¡æľī ä½ľçĶ¨ ãĢĤ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġshut Down () Ġ{ ĊĠĠĠĠĠĠĠ Ġexec !!. shutdown () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ è¯ķ åĽ¾ åģľæŃ¢ æīĢæľī æŃ£åľ¨ æī§è¡Į çļĦ æ´»åĬ¨ ä»»åĬ¡ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ è¯ķ åĽ¾ åģľæŃ¢ æīĢæľī æŃ£åľ¨ æī§è¡Į çļĦ æ´»åĬ¨ ä»»åĬ¡ ï¼Į æļĤ åģľ å¤ĦçĲĨ æŃ£åľ¨ çŃīå¾ħ çļĦ ä»»åĬ¡ ï¼Į å¹¶ è¿ĶåĽŀ çŃīå¾ħ æī§è¡Į çļĦ ä»»åĬ¡ åĪĹè¡¨ ãĢĤ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ æĹłæ³ķ ä¿Ŀè¯ģ èĥ½å¤Ł åģľæŃ¢ æŃ£åľ¨ å¤ĦçĲĨ çļĦ æ´»åĬ¨ æī§è¡Į ä»»åĬ¡ ï¼Į ä½Ĩæĺ¯ ä¼ļ å°½ åĬĽ å°Ŀè¯ķ ãĢĤ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġ çŃīå¾ħ æī§è¡Į çļĦ ä»»åĬ¡ çļĦ åĪĹè¡¨ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġshut Down Now (): ĠList < Runnable > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġexec !!. shutdown Now () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè¯·æ±Ĥ åħ³éĹŃ ãĢģ åıĳçĶŁ è¶ħæĹ¶ æĪĸèĢħ å½ĵåīį çº¿ç¨ĭ ä¸Ń æĸŃ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ æĹł è®º åĵª ä¸Ģä¸ª é¦ĸåħĪ åıĳçĶŁ ä¹ĭåĲİ ï¼Į éĥ½ å°Ĩ å¯¼èĩ´ éĺ» å¡ŀ ï¼Į çĽ´ åĪ° æīĢæľī ä»»åĬ¡ å®ĮæĪĲ æī§è¡Į ãĢĤ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtimeout Ġ æľĢ éķ¿ çŃīå¾ħ æĹ¶éĹ´ ĊĠĠĠĠ Ġ* Ġ@ param Ġunit ĠĠĠ Ġ æĹ¶éĹ´ åįķä½į ĊĠĠĠĠ Ġ* Ġ@ return Ġ` true `: Ġè¯·æ±Ĥ æĪĲåĬŁ < br ></ br >` false `: Ġè¯·æ±Ĥ è¶ħæĹ¶ ĊĠĠĠĠ Ġ* Ġ@ throws ĠInterruptedException Ġ ç»Ī ç«¯ å¼Ĥå¸¸ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( InterruptedException :: class ) ĊĠĠĠ Ġfun Ġawait Termination ( timeout : ĠLong , Ġunit : ĠTimeUnit ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġexec !!. await Termination ( timeout , Ġunit ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠæıĲ äº¤ ä¸Ģä¸ª Callable ä»»åĬ¡ çĶ¨äºİ æī§è¡Į ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġå¦Ĥæŀľ æĥ³ ç«ĭ åį³ éĺ» å¡ŀ ä»»åĬ¡ çļĦ çŃīå¾ħ ï¼Į åĪĻ åı¯ä»¥ä½¿çĶ¨ ` result Ġ= Ġexec . submit ( a Callable ). get (); ` å½¢å¼ı çļĦ æŀĦéĢł ãĢĤ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtask Ġ ä»»åĬ¡ ĊĠĠĠĠ Ġ* Ġ@ param Ġ< T > Ġ Ġ æ³Ľ åŀĭ ĊĠĠĠĠ Ġ* Ġ@ return Ġè¡¨ç¤º ä»»åĬ¡ çŃīå¾ħ å®ĮæĪĲ çļĦ Future , Ġ è¯¥ Future çļĦ ` get ` æĸ¹æ³ķ åľ¨ æĪĲåĬŁ å®ĮæĪĲ æĹ¶ å°Ĩ ä¼ļ è¿ĶåĽŀ è¯¥ ä»»åĬ¡ çļĦ ç»ĵæŀľ ãĢĤ ĊĠĠĠ Ġ</ T > Ġ*/ ĊĠĠĠ Ġfun Ġ< T > Ġsubmit ( task : ĠCallable < T >): ĠFuture < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġexec !!. submit ( task ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠæıĲ äº¤ ä¸Ģä¸ª Runnable ä»»åĬ¡ çĶ¨äºİ æī§è¡Į ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtask ĠĠ Ġ ä»»åĬ¡ ĊĠĠĠĠ Ġ* Ġ@ param Ġresult Ġè¿ĶåĽŀ çļĦ ç»ĵæŀľ ĊĠĠĠĠ Ġ* Ġ@ param Ġ< T > ĠĠĠ Ġ æ³Ľ åŀĭ ĊĠĠĠĠ Ġ* Ġ@ return Ġè¡¨ç¤º ä»»åĬ¡ çŃīå¾ħ å®ĮæĪĲ çļĦ Future , Ġ è¯¥ Future çļĦ ` get ` æĸ¹æ³ķ åľ¨ æĪĲåĬŁ å®ĮæĪĲ æĹ¶ å°Ĩ ä¼ļ è¿ĶåĽŀ è¯¥ ä»»åĬ¡ çļĦ ç»ĵæŀľ ãĢĤ ĊĠĠĠ Ġ</ T > Ġ*/ ĊĠĠĠ Ġfun Ġ< T > Ġsubmit ( task : ĠRunnable , Ġresult : ĠT ): ĠFuture < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġexec !!. submit ( task , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠæıĲ äº¤ ä¸Ģä¸ª Runnable ä»»åĬ¡ çĶ¨äºİ æī§è¡Į ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtask Ġ ä»»åĬ¡ ĊĠĠĠĠ Ġ* Ġ@ return Ġè¡¨ç¤º ä»»åĬ¡ çŃīå¾ħ å®ĮæĪĲ çļĦ Future , Ġ è¯¥ Future çļĦ ` get ` æĸ¹æ³ķ åľ¨ æĪĲåĬŁ å®ĮæĪĲ æĹ¶ å°Ĩ ä¼ļ è¿ĶåĽŀ null ç»ĵæŀľ ãĢĤ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsubmit ( task : ĠRunnable ): ĠFuture < *> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġexec !!. submit ( task ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæī§è¡Į ç»Ļ å®ļçļĦ ä»»åĬ¡ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġå½ĵ æīĢæľī ä»»åĬ¡ å®ĮæĪĲ æĹ¶ ï¼Į è¿ĶåĽŀ ä¿ĿæĮģ ä»»åĬ¡ çĬ¶æĢģ åĴĮ ç»ĵæŀľ çļĦ Future åĪĹè¡¨ ãĢĤ ĊĠĠĠĠ Ġ* Ġè¿ĶåĽŀ åĪĹè¡¨ çļĦæīĢæľī åħĥç´ł çļĦ [ Future . is Done ] ä¸º ` true `ãĢĤ ĊĠĠĠĠ Ġ* Ġ æ³¨æĦı ï¼Į åı¯ä»¥ æŃ£å¸¸ åľ° æĪĸ éĢļè¿ĩ æĬĽ åĩº å¼Ĥå¸¸ æĿ¥ ç»Ī æŃ¢ å·² å®ĮæĪĲ ä»»åĬ¡ ãĢĤ ĊĠĠĠĠ Ġ* Ġå¦Ĥæŀľ æŃ£åľ¨ è¿Ľè¡Į æŃ¤ æĵįä½ľ æĹ¶ ä¿®æĶ¹ äºĨ ç»Ļ å®ļçļĦ Ġcollection ï¼Į åĪĻ æŃ¤ æĸ¹æ³ķ çļĦ ç»ĵæŀľ æĺ¯ ä¸į ç¡® å®ļçļĦ ãĢĤ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtasks Ġ ä»»åĬ¡ éĽĨåĲĪ ĊĠĠĠĠ Ġ* Ġ@ param Ġ< T > ĠĠ Ġ æ³Ľ åŀĭ ĊĠĠĠĠ Ġ* Ġ@ return Ġè¡¨ç¤º ä»»åĬ¡ çļĦ ĠFuture Ġ åĪĹè¡¨ ï¼Į åĪĹè¡¨ é¡ºåºı ä¸İ ç»Ļ å®ļ ä»»åĬ¡ åĪĹè¡¨ çļĦ è¿Ńä»£ åĻ¨ æīĢ çĶŁæĪĲ çļĦ é¡ºåºı çĽ¸åĲĮ ï¼Į æ¯ıä¸ª ä»»åĬ¡ éĥ½ å·² å®ĮæĪĲ ãĢĤ ĊĠĠĠĠ Ġ* Ġ@ throws ĠInterruptedException Ġå¦Ĥæŀľ çŃīå¾ħ æĹ¶ åıĳçĶŁ ä¸Ń æĸŃ ï¼Į åľ¨ è¿Ļç§į æĥħåĨµä¸ĭ åıĸæ¶Ī å° ļ æľª å®ĮæĪĲ çļĦ ä»»åĬ¡ ãĢĤ ĊĠĠĠ Ġ</ T > Ġ*/ ĊĠĠĠ Ġ@ Throws ( InterruptedException :: class ) ĊĠĠĠ Ġfun Ġ< T > Ġinvoke All ( tasks : ĠCollection < Callable < T >> ): ĠList < Future < T >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġexec !!. invoke All ( tasks ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæī§è¡Į ç»Ļ å®ļçļĦ ä»»åĬ¡ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġå½ĵ æīĢæľī ä»»åĬ¡ å®ĮæĪĲ æĪĸ è¶ħæĹ¶ æľŁ æ»¡ æĹ¶ ( æĹł è®º åĵª ä¸ª é¦ĸåħĪ åıĳçĶŁ )ï¼Į è¿ĶåĽŀ ä¿ĿæĮģ ä»»åĬ¡ çĬ¶æĢģ åĴĮ ç»ĵæŀľ çļĦ Future åĪĹè¡¨ ãĢĤ ĊĠĠĠĠ Ġ* Ġè¿ĶåĽŀ åĪĹè¡¨ çļĦæīĢæľī åħĥç´ł çļĦ [ Future . is Done ] ä¸º ` true `ãĢĤ ĊĠĠĠĠ Ġ* Ġä¸Ģ æĹ ¦ è¿ĶåĽŀ åĲİ ï¼Į åį³ åıĸæ¶Ī å° ļ æľª å®ĮæĪĲ çļĦ ä»»åĬ¡ ãĢĤ ĊĠĠĠĠ Ġ* Ġ æ³¨æĦı ï¼Į åı¯ä»¥ æŃ£å¸¸ åľ° æĪĸ éĢļè¿ĩ æĬĽ åĩº å¼Ĥå¸¸ æĿ¥ ç»Ī æŃ¢ å·² å®ĮæĪĲ ä»»åĬ¡ ãĢĤ ĊĠĠĠĠ Ġ* Ġå¦Ĥæŀľ æŃ¤ æĵįä½ľ æŃ£åľ¨ è¿Ľè¡Į æĹ¶ ä¿®æĶ¹ äºĨ ç»Ļ å®ļçļĦ Ġcollection ï¼Į åĪĻ æŃ¤ æĸ¹æ³ķ çļĦ ç»ĵæŀľ æĺ¯ ä¸į ç¡® å®ļçļĦ ãĢĤ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtasks ĠĠ Ġ ä»»åĬ¡ éĽĨåĲĪ ĊĠĠĠĠ Ġ* Ġ@ param Ġtimeout Ġ æľĢ éķ¿ çŃīå¾ħ æĹ¶éĹ´ ĊĠĠĠĠ Ġ* Ġ@ param Ġunit ĠĠĠ Ġ æĹ¶éĹ´ åįķä½į ĊĠĠĠĠ Ġ* Ġ@ param Ġ< T > ĠĠĠĠ Ġ æ³Ľ åŀĭ ĊĠĠĠĠ Ġ* Ġ@ return Ġè¡¨ç¤º ä»»åĬ¡ çļĦ ĠFuture Ġ åĪĹè¡¨ ï¼Į åĪĹè¡¨ é¡ºåºı ä¸İ ç»Ļ å®ļ ä»»åĬ¡ åĪĹè¡¨ çļĦ è¿Ńä»£ åĻ¨ æīĢ çĶŁæĪĲ çļĦ é¡ºåºı çĽ¸åĲĮ ãĢĤ ĊĠĠĠĠ Ġ* Ġå¦Ĥæŀľ æĵįä½ľ æľª è¶ħæĹ¶ ï¼Į åĪĻ å·² å®ĮæĪĲ æīĢæľī ä»»åĬ¡ ãĢĤ å¦Ĥæŀľ ç¡® å®ŀ è¶ħæĹ¶ äºĨ ï¼Į åĪĻ æŁĲ äºĽ ä»»åĬ¡ å° ļ æľª å®ĮæĪĲ ãĢĤ ĊĠĠĠĠ Ġ* Ġ@ throws ĠInterruptedException Ġå¦Ĥæŀľ çŃīå¾ħ æĹ¶ åıĳçĶŁ ä¸Ń æĸŃ ï¼Į åľ¨ è¿Ļç§į æĥħåĨµä¸ĭ åıĸæ¶Ī å° ļ æľª å®ĮæĪĲ çļĦ ä»»åĬ¡ ĊĠĠĠ Ġ</ T > Ġ*/ ĊĠĠĠ Ġ@ Throws ( InterruptedException :: class ) ĊĠĠĠ Ġfun Ġ< T > Ġinvoke All ( tasks : ĠCollection < Callable < T >>, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimeout : ĠLong , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunit : ĠTimeUnit ): ĠList < Future < T >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġexec !!. invoke All ( tasks , Ġtimeout , Ġunit ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæī§è¡Į ç»Ļ å®ļçļĦ ä»»åĬ¡ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġå¦Ĥæŀľ æŁĲä¸ª ä»»åĬ¡ å·² æĪĲåĬŁ å®ĮæĪĲ ï¼Ī ä¹Łå°±æĺ¯ æľª æĬĽ åĩº å¼Ĥå¸¸ ï¼īï¼Į åĪĻ è¿ĶåĽŀ åħ¶ ç»ĵæŀľ ãĢĤ ĊĠĠĠĠ Ġ* Ġä¸Ģ æĹ ¦ æŃ£å¸¸ æĪĸ å¼Ĥå¸¸ è¿ĶåĽŀ åĲİ ï¼Į åĪĻ åıĸæ¶Ī å° ļ æľª å®ĮæĪĲ çļĦ ä»»åĬ¡ ãĢĤ ĊĠĠĠĠ Ġ* Ġå¦Ĥæŀľ æŃ¤ æĵįä½ľ æŃ£åľ¨ è¿Ľè¡Į æĹ¶ ä¿®æĶ¹ äºĨ ç»Ļ å®ļçļĦ collection ï¼Į åĪĻ æŃ¤ æĸ¹æ³ķ çļĦ ç»ĵæŀľ æĺ¯ ä¸į ç¡® å®ļçļĦ ãĢĤ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtasks Ġ ä»»åĬ¡ éĽĨåĲĪ ĊĠĠĠĠ Ġ* Ġ@ param Ġ< T > ĠĠ Ġ æ³Ľ åŀĭ ĊĠĠĠĠ Ġ* Ġ@ return Ġæ Ł Ĳ ä¸ª ä»»åĬ¡ è¿ĶåĽŀ çļĦ ç»ĵæŀľ ĊĠĠĠĠ Ġ* Ġ@ throws ĠInterruptedException Ġå¦Ĥæŀľ çŃīå¾ħ æĹ¶ åıĳçĶŁ ä¸Ń æĸŃ ĊĠĠĠĠ Ġ* Ġ@ throws ĠExecution Exception ĠĠ Ġå¦Ĥæŀľ æ²¡æľī ä»»åĬ¡ æĪĲåĬŁ å®ĮæĪĲ ĊĠĠĠ Ġ</ T > Ġ*/ ĊĠĠĠ Ġ@ Throws ( InterruptedException :: class , ĠExecution Exception :: class ) ĊĠĠĠ Ġfun Ġ< T > Ġinvoke Any ( tasks : ĠCollection < Callable < T >> ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġexec !!. invoke Any ( tasks ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæī§è¡Į ç»Ļ å®ļçļĦ ä»»åĬ¡ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġå¦Ĥæŀľ åľ¨ ç»Ļ å®ļçļĦ è¶ħæĹ¶ æľŁ æ»¡ åīį æŁĲä¸ª ä»»åĬ¡ å·² æĪĲåĬŁ å®ĮæĪĲ ï¼Ī ä¹Łå°±æĺ¯ æľª æĬĽ åĩº å¼Ĥå¸¸ ï¼īï¼Į åĪĻ è¿ĶåĽŀ åħ¶ ç»ĵæŀľ ãĢĤ ĊĠĠĠĠ Ġ* Ġä¸Ģ æĹ ¦ æŃ£å¸¸ æĪĸ å¼Ĥå¸¸ è¿ĶåĽŀ åĲİ ï¼Į åĪĻ åıĸæ¶Ī å° ļ æľª å®ĮæĪĲ çļĦ ä»»åĬ¡ ãĢĤ ĊĠĠĠĠ Ġ* Ġå¦Ĥæŀľ æŃ¤ æĵįä½ľ æŃ£åľ¨ è¿Ľè¡Į æĹ¶ ä¿®æĶ¹ äºĨ ç»Ļ å®ļçļĦ collection ï¼Į åĪĻ æŃ¤ æĸ¹æ³ķ çļĦ ç»ĵæŀľ æĺ¯ ä¸į ç¡® å®ļçļĦ ãĢĤ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtasks ĠĠ Ġ ä»»åĬ¡ éĽĨåĲĪ ĊĠĠĠĠ Ġ* Ġ@ param Ġtimeout Ġ æľĢ éķ¿ çŃīå¾ħ æĹ¶éĹ´ ĊĠĠĠĠ Ġ* Ġ@ param Ġunit ĠĠĠ Ġ æĹ¶éĹ´ åįķä½į ĊĠĠĠĠ Ġ* Ġ@ param Ġ< T > ĠĠĠĠ Ġ æ³Ľ åŀĭ ĊĠĠĠĠ Ġ* Ġ@ return Ġæ Ł Ĳ ä¸ª ä»»åĬ¡ è¿ĶåĽŀ çļĦ ç»ĵæŀľ ĊĠĠĠĠ Ġ* Ġ@ throws ĠInterruptedException Ġå¦Ĥæŀľ çŃīå¾ħ æĹ¶ åıĳçĶŁ ä¸Ń æĸŃ ĊĠĠĠĠ Ġ* Ġ@ throws ĠExecution Exception ĠĠ Ġå¦Ĥæŀľ æ²¡æľī ä»»åĬ¡ æĪĲåĬŁ å®ĮæĪĲ ĊĠĠĠĠ Ġ* Ġ@ throws ĠTimeout Exception ĠĠĠĠ Ġå¦Ĥæŀľ åľ¨ æīĢæľī ä»»åĬ¡ æĪĲåĬŁ å®ĮæĪĲ ä¹ĭåīį ç»Ļ å®ļçļĦ è¶ħæĹ¶ æľŁ æ»¡ ĊĠĠĠ Ġ</ T > Ġ*/ ĊĠĠĠ Ġ@ Throws ( InterruptedException :: class , ĠExecution Exception :: class , ĠTimeout Exception :: class ) ĊĠĠĠ Ġfun Ġ< T > Ġinvoke Any ( tasks : ĠCollection < Callable < T >>, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimeout : ĠLong , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunit : ĠTimeUnit ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġexec !!. invoke Any ( tasks , Ġtimeout , Ġunit ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ å»¶ è¿ Ł æī§è¡Į Runnable åĳ½ä»¤ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcommand Ġåĳ½ä»¤ ĊĠĠĠĠ Ġ* Ġ@ param Ġdelay ĠĠ Ġ å»¶ è¿ Ł æĹ¶éĹ´ ĊĠĠĠĠ Ġ* Ġ@ param Ġunit ĠĠĠ Ġ åįķä½į ĊĠĠĠĠ Ġ* Ġ@ return Ġè¡¨ç¤º æĮ Ĥ èµ· ä»»åĬ¡ å®ĮæĪĲ çļĦ Scheduled Future ï¼Į å¹¶ä¸Ķ åħ¶ ` get ()` æĸ¹æ³ķ åľ¨ å®ĮæĪĲ åĲİ å°Ĩ è¿ĶåĽŀ ` null ` ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġschedule ( command : ĠRunnable , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay : ĠLong , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunit : ĠTimeUnit ): ĠScheduled Future < *> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġschedule Exec . schedule ( command , Ġdelay , Ġunit ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ å»¶ è¿ Ł æī§è¡Į Callable åĳ½ä»¤ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcallable Ġåĳ½ä»¤ ĊĠĠĠĠ Ġ* Ġ@ param Ġdelay ĠĠĠ Ġ å»¶ è¿ Ł æĹ¶éĹ´ ĊĠĠĠĠ Ġ* Ġ@ param Ġunit ĠĠĠĠ Ġ æĹ¶éĹ´ åįķä½į ĊĠĠĠĠ Ġ* Ġ@ param Ġ< V > ĠĠĠĠĠ Ġ æ³Ľ åŀĭ ĊĠĠĠĠ Ġ* Ġ@ return Ġåı¯ çĶ¨äºİ æıĲ åıĸ ç»ĵæŀľ æĪĸ åıĸæ¶Ī çļĦ Scheduled Future ĊĠĠĠ Ġ</ V > Ġ*/ ĊĠĠĠ Ġfun Ġ< V > Ġschedule ( callable : ĠCallable < V >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay : ĠLong , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunit : ĠTimeUnit ): ĠScheduled Future < V > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġschedule Exec . schedule ( callable , Ġdelay , Ġunit ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ å»¶ è¿ Ł å¹¶ å¾ªçİ¯ æī§è¡Į åĳ½ä»¤ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcommand ĠĠĠĠĠ Ġåĳ½ä»¤ ĊĠĠĠĠ Ġ* Ġ@ param Ġinitial Delay Ġ é¦ĸ æ¬¡ æī§è¡Į çļĦ å»¶ è¿ Ł æĹ¶éĹ´ ĊĠĠĠĠ Ġ* Ġ@ param Ġperiod ĠĠĠĠĠĠ Ġ è¿ŀ ç»Ń æī§è¡Į ä¹ĭéĹ´çļĦ åĳ¨æľŁ ĊĠĠĠĠ Ġ* Ġ@ param Ġunit ĠĠĠĠĠĠĠĠ Ġ æĹ¶éĹ´ åįķä½į ĊĠĠĠĠ Ġ* Ġ@ return Ġè¡¨ç¤º æĮ Ĥ èµ· ä»»åĬ¡ å®ĮæĪĲ çļĦ Scheduled Future ï¼Į å¹¶ä¸Ķ åħ¶ ` get ()` æĸ¹æ³ķ åľ¨ åıĸæ¶Ī åĲİ å°Ĩ æĬĽ åĩº å¼Ĥå¸¸ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġschedule With Fixed Rate ( command : ĠRunnable , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Delay : ĠLong , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperiod : ĠLong , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunit : ĠTimeUnit ): ĠScheduled Future < *> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġschedule Exec . schedule At Fixed Rate ( command , Ġinitial Delay , Ġperiod , Ġunit ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ å»¶ è¿ Ł å¹¶ ä»¥ åĽºå®ļ ä¼ ĳ æģ¯ æĹ¶éĹ´ å¾ªçİ¯ æī§è¡Į åĳ½ä»¤ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcommand ĠĠĠĠĠ Ġåĳ½ä»¤ ĊĠĠĠĠ Ġ* Ġ@ param Ġinitial Delay Ġ é¦ĸ æ¬¡ æī§è¡Į çļĦ å»¶ è¿ Ł æĹ¶éĹ´ ĊĠĠĠĠ Ġ* Ġ@ param Ġdelay ĠĠĠĠĠĠĠ Ġæ¯ı ä¸Ģæ¬¡ æī§è¡Į ç»Ī æŃ¢ åĴĮ ä¸ĭ ä¸Ģæ¬¡ æī§è¡Į å¼Ģå§ĭ ä¹ĭéĹ´çļĦ å»¶ è¿ Ł ĊĠĠĠĠ Ġ* Ġ@ param Ġunit ĠĠĠĠĠĠĠĠ Ġ æĹ¶éĹ´ åįķä½į ĊĠĠĠĠ Ġ* Ġ@ return Ġè¡¨ç¤º æĮ Ĥ èµ· ä»»åĬ¡ å®ĮæĪĲ çļĦ Scheduled Future ï¼Į å¹¶ä¸Ķ åħ¶ ` get ()` æĸ¹æ³ķ åľ¨ åıĸæ¶Ī åĲİ å°Ĩ æĬĽ åĩº å¼Ĥå¸¸ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġschedule With Fixed Delay ( command : ĠRunnable , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Delay : ĠLong , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay : ĠLong , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunit : ĠTimeUnit ): ĠScheduled Future < *> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġschedule Exec . schedule With Fixed Delay ( command , Ġinitial Delay , Ġdelay , Ġunit ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠFixed Thread Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCached Thread Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSingle Thread Ġ= Ġ 2 ĊĠĠĠ Ġ} Ċ } Ċ