package Ġcom . code abo vel ab . tp c . util Ċ Ċ import Ġcom . google . common . util . concurrent . Thread Factory Builder Ċ Ċ import Ġjava . util . concurrent .* Ċ import Ġjava . util . concurrent . atomic . Atomic Integer Ċ Ċ /** Ċ Ġ* ĠCommon Ġutilities Ġfor Ġ{@ link Ġjava . util . concurrent . Executor Ġ} Ċ Ġ*/ Ċ object ĠExecutor Utils Ġ{ ĊĠĠĠĠ Ġval ĠDIRECT : ĠExecutor Ġ= ĠExecutor Ġ{ Ġcommand Ġ-> Ġcommand . run () Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExecutor Ġde ffer Ġtasks Ġinto Ġinternal Ġstorage Ġand Ġrun Ġits Ġonly Ġat Ġ{@ link Ġ# flush ()} Ġ. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠDeferred Executor Ġ: ĠExecutor Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlock Ġ= ĠAny () ĊĠĠĠĠĠĠĠ Ġ@ Volatile ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġqueue Ġ= ĠCopy On Write ArrayList < Runnable >() ĊĊĠĠĠĠĠĠĠ Ġ@ Override ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġexecute ( command : ĠRunnable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue . add ( command ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠExecute Ġall Ġscheduled Ġtasks . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġflush () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġold Ġ Ġ= Ġsynchronized Ġ( lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtmp Ġ= Ġthis . queue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . queue Ġ= ĠCopy On Write ArrayList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtmp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( run nable Ġin Ġold ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrunnable . run () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ see ĠDeferred Executor ĊĠĠĠĠ Ġ* Ġ@ return Ġnew Ġinstance Ġof Ġ{@ link ĠDeferred Executor Ġ} ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdeferred (): ĠDeferred Executor Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠDeferred Executor () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠThread Factory Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġdaemon : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġun caught ExceptionHandler : ĠThread . Un caught ExceptionHandler ? ĊĠĠĠ Ġ): ĠThread Factory Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġgroup : ĠThread Group ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcount Ġ= ĠAtomicInteger ( 1 ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġprefix : ĠString ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsm Ġ= ĠSystem . get Security Manager () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Ġ= Ġif ( sm Ġ!= Ġnull ) Ġ Ġsm . thread Group Ġelse ĠThread . currentThread (). thread Group ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . prefix Ġ= Ġif ( name . endsWith ("- ")) Ġname Ġelse Ġ( name Ġ+ Ġ"- ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnew Thread ( r : ĠRunnable ): ĠThread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġthread Ġ= ĠThread ( group , Ġr , Ġprefix Ġ+ Ġcount . get And Increment ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthread . is Daemon Ġ= Ġdaemon ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthread . priority Ġ= ĠThread . NORM _ PRIORITY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( this . unc a ught ExceptionHandler Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthread . unc a ught ExceptionHandler Ġ= Ġthis . unc a ught ExceptionHandler ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthread ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠExecutor Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġname Ġ= Ġ" executor " ĊĠĠĠĠĠĠĠ Ġvar Ġdaemon Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġvar Ġexception Handler : ĠThread . Un caught ExceptionHandler Ġ= ĠThrow ables . unc a ught Handler () ĊĠĠĠĠĠĠĠ Ġvar Ġrejected Handler : ĠReject ed Execution Handler Ġ= ĠThreadPool Executor . Abort Policy () ĊĠĠĠĠĠĠĠ Ġvar ĠmaxSize Ġ= Ġ 5 ĊĠĠĠĠĠĠĠ Ġvar Ġcore Size Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġvar Ġkeep Alive Ġ= Ġ 3 0 L ĊĠĠĠĠĠĠĠ Ġvar Ġqueue Size Ġ= Ġ 1 0 ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠName Ġof Ġthread , Ġwithout Ġthread Ġnumber Ġpattern . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġname Ġname ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġthis ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġname ( name : ĠString ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . name Ġ= Ġname ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠDa emon Ġflag . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġdaemon Ġdefault Ġtrue ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġthis ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġdaemon ( daemon : ĠBoolean ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . daemon Ġ= Ġdaemon ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠUn caught Ġexception Ġhandler . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġexception Handler Ġhandler , Ġdefault Ġ{@ link ĠThrow ables # unc a ught Handler ()} ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġthis ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġexception Handler ( exception Handler : ĠThread . Un caught ExceptionHandler ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . exception Handler Ġ= Ġexception Handler ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReject ed Ġexecution Ġhandler . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġrejected Handler Ġrejected Ġexecution Ġhandler , Ġdefault Ġ{@ link ĠThreadPool Executor . Abort Policy ()} ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġthis ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġrejected Handler ( rejected Handler : ĠReject ed Execution Handler ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . rejected Handler Ġ= Ġrejected Handler ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġcore Size ( core Size : ĠInt ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . core Size Ġ= Ġcore Size ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun ĠmaxSize ( maxSize : ĠInt ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . maxSize Ġ= ĠmaxSize ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġkeep Alive ( keep Alive : ĠLong ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . keep Alive Ġ= Ġkeep Alive ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġqueue Size ( queue Size : ĠInt ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . queue Size Ġ= Ġqueue Size ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġbuild () Ġ: ĠExecutor Service Ġ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtf Ġ= ĠThread Factory Impl ( name , Ġdaemon , Ġexception Handler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠThreadPool Executor ( core Size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmaxSize , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkeep Alive , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTimeUnit . SECONDS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArray BlockingQueue < Runnable >( queue Size ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtf , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrejected Handler ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġexecutor Builder (): ĠExecutor Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠExecutor Builder () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMake Ġsingle Ġdaemon Ġthread Ġscheduled Ġexecutor Ġservice . ĊĠĠĠĠ Ġ* Ġ@ param Ġclazz Ġclass , Ġit Ġuser Ġfor Ġcalculation Ġname Ġof Ġthread ĊĠĠĠĠ Ġ* Ġ@ return Ġexecutor Ġservice ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsingle Thread Scheduled Executor ( clazz : ĠClass < *> ): ĠScheduled ExecutorService Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠExec utors . new Single Thread Scheduled Executor ( Thread Factory Builder () ĊĠĠĠĠĠĠĠĠĠ Ġ. set Daemon ( true ) ĊĠĠĠĠĠĠĠĠĠ Ġ. setName Format ( clazz . simple Name Ġ+ Ġ"- % d ") ĊĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠ Ġ} Ċ } Ċ