package Ġdev . ric ardo ant olin . x ceed test . network provider . exec utors ĊĊ Ċ import Ġdev . ric ardo ant olin . x ceed test . data . exec utors . Thread Executor Ċ import Ġio . reactivex . Scheduler Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġjava . util . concurrent . BlockingQueue Ċ import Ġjava . util . concurrent . Linked BlockingQueue Ċ import Ġjava . util . concurrent . Thread Factory Ċ import Ġjava . util . concurrent . ThreadPoolExecutor Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġjavax . inject . Inject Ċ import Ġjavax . inject . Singleton Ċ Ċ /** Ċ Ġ* ĠDecor ated Ġ[ ThreadPoolExecutor ] Ċ Ġ*/ Ċ @ Singleton Ċ class ĠJob Executor Ġ@ Inject Ġconstructor () Ġ: ĊĠĠĠ ĠThread Executor Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġwork Queue : ĠBlock ing Queue < Runnable > ĊĊĠĠĠ Ġprivate Ġval Ġthread Pool Executor : ĠThreadPool Executor ĊĊĠĠĠ Ġprivate Ġval Ġthread Factory : ĠThread Factory ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . work Queue Ġ= ĠLinked BlockingQueue < Runnable >() ĊĠĠĠĠĠĠĠ Ġthis . thread Factory Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠJob Thread Factory () ĊĠĠĠĠĠĠĠ Ġthis . thread Pool Executor Ġ= ĠThreadPool Executor ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠINITIAL _ POOL _ SIZE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMAX _ POOL _ SIZE , ĠK EE P _ AL IVE _ TIME . to Long (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠK EE P _ AL IVE _ TIME _ UNIT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . work Queue , Ġthis . thread Factory ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Scheduler (): ĠScheduler Ġ= ĠS chedulers . from ( this ) ĊĊĠĠĠ Ġoverride Ġfun Ġexecute ( run nable : ĠRunnable ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġrunnable ?. let Ġ{ Ġthis . thread Pool Executor . execute ( run nable ) Ġ} ĊĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException (" Runnable Ġto Ġexecute Ġcannot Ġbe Ġnull ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠJob Thread Factory Ġ: ĠThread Factory Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġcounter Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnew Thread ( run nable : ĠRunnable ): ĠThread Ġ= ĠThread ( run nable , ĠTHREAD _ NAME Ġ+ Ġcounter ++) ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠTHREAD _ NAME Ġ= Ġ" android _" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠINITIAL _ POOL _ SIZE Ġ= Ġ 3 ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠMAX _ POOL _ SIZE Ġ= Ġ 5 ĊĊĠĠĠĠĠĠĠ Ġ// ĠSets Ġthe Ġamount Ġof Ġtime Ġan Ġidle Ġthread Ġwaits Ġbefore Ġterminating ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠK EE P _ AL IVE _ TIME Ġ= Ġ 1 0 ĊĊĠĠĠĠĠĠĠ Ġ// ĠSets Ġthe ĠTime ĠUnit Ġto Ġseconds ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠK EE P _ AL IVE _ TIME _ UNIT Ġ= ĠTimeUnit . SECONDS ĊĠĠĠ Ġ} Ċ }