/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 . ĠD mit ry ĠSt ark in ĠContact s : Ġt 0 5 0 6 8 0 3 0 8 0 @ gmail . com Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the ĠÂ« License Â» ); Ċ Ġ* Ġ Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* Ġ ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ġ Ġ// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ġ ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġ Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan ĠÂ« AS ĠIS Â» ĠBASIS , Ċ Ġ* Ġ ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* Ġ ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġ Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . star soft . simple android async library . exec utors . pre inst al . base . thread pools Ċ Ċ import Ġandroidx . lifecycle . Lifecycle Owner Ċ import Ġcom . star soft . simple android async library . core . l ifec icles upport . interfaces . Lifecycle Support Ċ import Ġjava . lang . Exception Ċ import Ġjava . util . concurrent .* Ċ Ċ // This ĠFile ĠCreated Ġat Ġ 2 5 . 1 0 . 2 0 2 0 Ġ 1 7 : 5 4 . Ċ Ċ /** Ċ Ġ* Ġ@ since Ġ 0 . 1 . 0 Ċ Ġ* Ġ@ suppress */ Ċ private Ġfun Ġdetermine NumberOf Processors () Ġ= ĠRuntime . get Runtime (). available Processors () Ċ Ċ val ĠDEFAULT : ĠNothing ? Ġ= Ġnull Ċ val ĠNUMBER _ OF _ PROCESS ORS Ġ= Ġdetermine NumberOf Processors () Ċ Ċ private Ġconst Ġval ĠDEFAULT _ CORE _ POOL _ SIZE Ġ= Ġ 0 Ċ private Ġval ĠDEFAULT _ MAX _ POOL _ SIZE Ġ= ĠNUMBER _ OF _ PROCESS ORS Ġ+ Ġ 1 Ċ private Ġconst Ġval ĠDEFAULT _ THREAD _ IDLE _ TIME : ĠLong Ġ= Ġ 3 0 Ċ private Ġconst Ġval ĠDEFAULT _ ALLOW _ CORE _ THREAD _ TIME _ OUT : ĠBoolean Ġ= Ġfalse Ċ private Ġval ĠDEFAULT _ TIME _ UNIT : ĠTimeUnit ? Ġ= ĠTimeUnit . SECONDS Ċ Ċ /** Ċ Ġ* Ġ@ since Ġ 0 . 1 . 0 Ċ Ġ* Ġ@ suppress */ Ċ abstract Ġclass ĠAbstract ThreadPool Ġ: ĠThreadPool Executor ( ĊĠĠĠ ĠDEFAULT _ CORE _ POOL _ SIZE , ĊĠĠĠ ĠDEFAULT _ MAX _ POOL _ SIZE , ĊĠĠĠ ĠDEFAULT _ THREAD _ IDLE _ TIME , ĊĠĠĠ ĠDEFAULT _ TIME _ UNIT , ĊĠĠĠ ĠLinked BlockingQueue < Runnable >() Ġas ĠBlock ing Queue < Runnable >? Ċ ), ĠLifecycle Support Ġ{ ĊĊĠĠĠ Ġvar Ġallow Finalize : ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġabstract Ġval Ġallow Core Thread TimeOut : ĠBoolean ? ĊĠĠĠ Ġabstract Ġval Ġstart PoolSize : ĠInt ? ĊĠĠĠ Ġabstract Ġval Ġmax PoolSize : ĠInt ? ĊĠĠĠ Ġabstract Ġval Ġthread Idle Time : ĠLong ? ĊĠĠĠ Ġabstract Ġval Ġtime Unit : ĠTimeUnit ? ĊĠĠĠ Ġabstract Ġval Ġfactory : ĠThread Factory ? ĊĠĠĠ Ġabstract Ġval Ġrejected Task Handler : ĠReject ed Execution Handler ? ĊĊĠĠĠ Ġfun Ġadjust () Ġ{ ĊĠĠĠĠĠĠĠ Ġallow Core Thread TimeOut ( allow Core Thread TimeOut Ġ?: ĠDEFAULT _ ALLOW _ CORE _ THREAD _ TIME _ OUT ) ĊĠĠĠĠĠĠĠ Ġset KeepAlive Time ( thread Idle Time ?. take Unless Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġ== Ġ 0 L Ġ&& Ġ( allow Core Thread TimeOut Ġ?: ĠDEFAULT _ ALLOW _ CORE _ THREAD _ TIME _ OUT ) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: ĠDEFAULT _ THREAD _ IDLE _ TIME , Ġtime Unit Ġ?: ĠDEFAULT _ TIME _ UNIT ) ĊĠĠĠĠĠĠĠ Ġcore PoolSize Ġ= Ġstart PoolSize Ġ?: ĠDEFAULT _ CORE _ POOL _ SIZE ĊĠĠĠĠĠĠĠ Ġmaximum PoolSize Ġ= Ġmax PoolSize Ġ?: ĠDEFAULT _ MAX _ POOL _ SIZE ĊĠĠĠĠĠĠĠ Ġif Ġ( rejected Task Handler Ġ!== ĠDEFAULT ) Ġrejected Execution Handler Ġ= Ġrejected Task Handler ĊĠĠĠĠĠĠĠ Ġthread Factory Ġ= Ġfactory Ġ?: ĠDefault Thread Factory ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfinal Ġoverride Ġfun Ġallow Core Thread TimeOut ( value : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . allow Core Thread TimeOut ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġallow Core Thread TimeOut Ġ?: ĠDEFAULT _ ALLOW _ CORE _ THREAD _ TIME _ OUT ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfinal Ġoverride Ġfun Ġset KeepAlive Time ( time : ĠLong , Ġunit : ĠTimeUnit ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . set KeepAlive Time ( thread Idle Time ?. take Unless Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġ== Ġ 0 L Ġ&& Ġ( allow Core Thread TimeOut Ġ?: ĠDEFAULT _ ALLOW _ CORE _ THREAD _ TIME _ OUT ) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: ĠDEFAULT _ THREAD _ IDLE _ TIME , Ġtime Unit Ġ?: ĠDEFAULT _ TIME _ UNIT ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfinal Ġoverride Ġfun Ġset Maximum PoolSize ( maximum PoolSize : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . setMaximum PoolSize ( max PoolSize Ġ?: ĠDEFAULT _ MAX _ POOL _ SIZE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfinal Ġoverride Ġfun Ġset Core PoolSize ( core PoolSize : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . set Core PoolSize ( core PoolSize Ġ?: ĠDEFAULT _ CORE _ POOL _ SIZE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfinal Ġoverride Ġfun Ġset Thread Factory ( thread Factory : ĠThread Factory ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . set Thread Factory ( thread Factory Ġ?: ĠDefault Thread Factory ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshutdown () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( allow Finalize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . shutdown () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException (" Imp ossible Ġshutdown Ġthis ĠThreadPool ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshutdown Now (): ĠMutable List < Runnable > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( allow Finalize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . shutdown Now () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException (" Imp ossible Ġshutdown Ġthis ĠThreadPool ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġconnect To Lifecycle ( owner : ĠLifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( allow Finalize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . connect To Lifecycle ( owner ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException (" This ĠThreadPool Ġcant Ġconnect Ġto ĠLifecycle ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfinalize Task () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( allow Finalize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshutdown Now () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException (" This ĠThreadPool Ġcant Ġfinalize ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }