package Ġcn . gor outer . api . kotlin . thread ĊĊ Ċ import Ġcn . gor outer . api . kotlin . Const Ċ import Ġcn . gor outer . api . kotlin . core . Logger Ċ import Ġjava . util . concurrent .* Ċ Ċ /** Ċ Ġ* Ġ@ author Ġlog cat Ċ Ġ* Ġ@ since Ġ 2 0 2 0 / 0 8 / 1 9 Ġ 1 7 : 0 7 Ċ Ġ*/ Ċ class ĠDefault Pool Executor Ġprivate Ġconstructor ( core PoolSize : ĠInt , Ġmaximum PoolSize : ĠInt , Ġkeep Alive Time : ĠLong , Ġunit : ĠTimeUnit , Ġwork Queue : ĠBlock ing Queue < Runnable >, Ġthread Factory : ĠThread Factory ) Ġ: ĠThreadPool Executor ( core PoolSize , Ġmaximum PoolSize , Ġkeep Alive Time , Ġunit , Ġwork Queue , Ġthread Factory , ĠReject ed Execution Handler Ġ{ Ġr , Ġexecutor Ġ-> ĠLogger . error ( Const . TAG Ġ+ Ġ" Task Ġrejected , Ġtoo Ġmany Ġtask !") Ġ}) Ġ{ ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ çº¿ç¨ĭ æī§è¡Į ç»ĵæĿŁ ï¼Į é¡º ä¾¿ çľĭ ä¸Ģä¸ĭ æľī æ²¡æľī ä¹± ä¸ĥ åħ« ç³ Ł çļĦ å¼Ĥå¸¸ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġr Ġthe Ġrunnable Ġthat Ġhas Ġcompleted ĊĠĠĠĠ Ġ* Ġ@ param Ġt Ġthe Ġexception Ġthat Ġcaused Ġtermination , Ġor Ġnull Ġif ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġafter Execute ( r : ĠRunnable ?, Ġt : ĠThrowable ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġt : ĠThrowable ? Ġ= Ġt ĊĠĠĠĠĠĠĠ Ġsuper . after Execute ( r , Ġt ) ĊĠĠĠĠĠĠĠ Ġif Ġ( t Ġ== Ġnull Ġ&& Ġr Ġis ĠFuture <* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( r Ġas ĠFuture < *> ). get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ce : ĠC ancellation Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt Ġ= Ġce ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ee : ĠExecution Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt Ġ= Ġee . cause ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ie : ĠInterruptedException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread . currentThread (). interrupt () Ġ// Ġignore / reset ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( t Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . warn ( Const . TAG Ġ+ Ġ""" ĊĠĠĠĠ ĠRunning Ġtask Ġappeared Ġexception ! ĠThread Ġ[ ${ Thread . currentThread (). name }], Ġbecause Ġ[ ${ t . message }] ĊĠĠĠĠ Ġ${ format StackTrace ( t . stack Trace )} ĊĠĠĠĠ Ġ""" . trim Indent ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠ ĠThread Ġargs ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCPU _ COUNT Ġ= ĠRuntime . get Runtime (). available Processors () ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠINIT _ THREAD _ COUNT Ġ= ĠCPU _ COUNT Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠMAX _ THREAD _ COUNT Ġ= ĠINIT _ THREAD _ COUNT ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠS UR PLUS _ THREAD _ LI FE Ġ= Ġ 3 0 L ĊĊĠĠĠĠĠĠĠ Ġ@ Volatile ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġinstance : ĠDefault Pool Executor ? Ġ= Ġnull ĊĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun ĠgetInstance (): ĠDefault Pool Executor Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( instance Ġ== Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( Default Pool Executor :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( null Ġ== Ġinstance ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstance Ġ= ĠDefault Pool Executor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠINIT _ THREAD _ COUNT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMAX _ THREAD _ COUNT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS UR PLUS _ THREAD _ LI FE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTimeUnit . SECONDS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArray BlockingQueue ( 6 4 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDefault Thread Factory ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinstance !! ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æīĵåį° çº¿ç¨ĭ åłĨ æłĪ ä¿¡æģ¯ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġstack Trace ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġformat StackTrace ( stack Trace : ĠArray < StackTrace Element >): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġfor Ġ( element Ġin Ġstack Trace ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append (" ĠĠĠ Ġat Ġ"). append ( element . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ("\ n ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsb . toString () ĊĠĠĠ Ġ} Ċ }