package Ġcom . pod cre ep . concurrency Ċ Ċ import Ġandroid . os . Handler Ċ Ċ /** Ċ Ġ* ĠAn Ġenumeration Ġof Ġthe Ġthread Ġtypes Ġwithin ĠWar ĠWorld s . ĠHas Ġsome Ġhelper Ġmethods Ġto Ġensure Ġyou Ġrun Ċ Ġ* Ġon Ġa Ġparticular Ġthread . Ċ Ġ*/ Ċ enum Ġclass ĠThread s Ġ{ ĊĠ Ġ/** ĊĠĠ Ġ* ĠThe Ġmain ĠUI Ġthread . ĊĠĠ Ġ*/ ĊĠ ĠUI , ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠThe ĠOpenGL Ġrender Ġthread . ĠWe Ġassume Ġthere Ġis Ġonly Ġone Ġof Ġthese Ġin Ġthe Ġwhole Ġprocess . ĊĠĠ Ġ*/ ĊĠ ĠGL , ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠA Ġspecial Ġ" class " Ġof Ġthread Ġthat Ġactually Ġrepresents Ġa Ġpool Ġof Ġbackground Ġworkers . ĊĠĠ Ġ*/ ĊĠ ĠBACK GROUND ; ĊĊĠ Ġprivate Ġvar Ġis Initialized : ĠBoolean Ġ= Ġfalse ĊĠ Ġprivate Ġvar Ġhandler : ĠHandler ? Ġ= Ġnull ĊĠ Ġprivate Ġvar Ġtask Queue : ĠTask Queue ? Ġ= Ġnull ĊĠ Ġprivate Ġvar Ġthread : ĠThread ? Ġ= Ġnull ĊĠ Ġprivate Ġvar Ġthread Pool : ĠThreadPool ? Ġ= Ġnull ĊĊĠ Ġval Ġis Current Thread : ĠBoolean ĊĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠ Ġ// check State ( isInitialized ) ĊĊĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġthread Ġ!= Ġnull Ġ-> Ġthread Ġ=== ĠThread . currentThread () ĊĠĠĠĠĠĠĠ Ġthread Pool Ġ!= Ġnull Ġ-> Ġthread Pool !!. is Thread ( this ) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException (" thread Ġis Ġnull Ġand Ġthread Pool Ġis Ġnull ") ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠ Ġfun Ġset Thread ( thread : ĠThread , Ġtask Queue : ĠTask Queue ) Ġ{ ĊĠĠĠ Ġ// check State (! isInitialized Ġ|| Ġthis . task Queue Ġ=== Ġtask Queue ) ĊĠĠĠ Ġthis . thread Ġ= Ġthread ĊĠĠĠ Ġthis . task Queue Ġ= Ġtask Queue ĊĠĠĠ Ġthis . isInitialized Ġ= Ġtrue ĊĠ Ġ} ĊĊĠ Ġfun Ġset Thread ( thread : ĠThread , Ġhandler : ĠHandler ) Ġ{ ĊĠĠĠ Ġ// check State (! isInitialized ) ĊĠĠĠ Ġthis . thread Ġ= Ġthread ĊĠĠĠ Ġthis . handler Ġ= Ġhandler ĊĠĠĠ Ġthis . isInitialized Ġ= Ġtrue ĊĠ Ġ} ĊĊĠ Ġ/** ĠReset Ġthis Ġthread , Ġun associate Ġit Ġfrom Ġthe Ġcurrent Ġthread , Ġhandler , Ġtask Ġqueue Ġcombo . Ġ Ġ*/ ĊĠ Ġfun Ġreset Thread () Ġ{ ĊĠĠĠ Ġthread Ġ= Ġnull ĊĠĠĠ Ġhandler Ġ= Ġnull ĊĠĠĠ Ġtask Queue Ġ= Ġnull ĊĠĠĠ Ġis Initialized Ġ= Ġfalse ĊĠ Ġ} ĊĊĠ Ġfun Ġset ThreadPool ( thread Pool : ĠThreadPool ) Ġ{ ĊĠĠĠ Ġ// check State (! isInitialized ) ĊĠĠĠ Ġthis . thread Pool Ġ= Ġthread Pool ĊĠĠĠ Ġthis . isInitialized Ġ= Ġtrue ĊĠ Ġ} ĊĊĠ Ġfun Ġrun Task ( run nable : ĠRunnable ) Ġ{ ĊĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠ Ġhandler Ġ!= Ġnull Ġ-> Ġhandler !!. post ( run nable ) ĊĠĠĠĠĠ Ġthread Pool Ġ!= Ġnull Ġ-> Ġthread Pool !!. run Task ( run nable ) ĊĠĠĠĠĠ Ġtask Queue Ġ!= Ġnull Ġ-> Ġtask Queue !!. post Task ( run nable ) ĊĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException (" Cannot Ġrun Ġtask , Ġno Ġhandler , Ġtask Queue Ġor Ġthread Pool !") ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠ Ġfun Ġcheck On Thread ( thread : ĠThread s ) Ġ{ ĊĠĠĠĠĠ Ġ// ĠNote : ĠWe Ġdon 't Ġuse ĠPreconditions . check State Ġbecause Ġwe Ġwant Ġa Ġnice Ġerror Ġmessage Ġand Ġdon 't ĊĠĠĠĠĠ Ġ// Ġwant Ġto Ġallocate Ġthe Ġstring Ġfor Ġthe Ġmessage Ġevery Ġtime . ĊĠĠĠĠĠ Ġif Ġ(! thread . is Current Thread ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Unexpected ly Ġnot Ġon Ġ$ thread ") ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcheck Not On Thread ( thread : ĠThread s ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( thread . is Current Thread ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Unexpected ly Ġon Ġ$ thread ") ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ