package Ġcom . bad oo . reak t ive . dis posable Ċ Ċ import Ġcom . bad oo . reak t ive . utils . atomic . Atomic Reference Ċ import Ġcom . bad oo . reak t ive . utils . atomic . get AndUpdate Ċ Ċ /** Ċ Ġ* ĠThread - safe Ġcontainer Ġof Ġone Ġ[ Disposable ] Ċ Ġ*/ Ċ class ĠDis posable Wrapper Ġ: ĠDis posable Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġref Ġ= ĠAtomic Reference < Holder ? >( Holder ( null ), Ġtrue ) ĊĠĠĠ Ġoverride Ġval Ġis Disposed : ĠBoolean Ġget () Ġ= Ġref . value Ġ== Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġdispose () Ġ{ ĊĠĠĠĠĠĠĠ Ġset Holder ( null ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAtom ically Ġeither Ġreplaces Ġany Ġexisting Ġ[ Disposable ] Ġwith Ġthe Ġspecified Ġone Ġor Ġdis poses Ġit Ġif Ġwrapper Ġis Ġalready Ġdisposed . ĊĠĠĠĠ Ġ* ĠAlso Ġdis poses Ġany Ġreplaced Ġ[ Disposable ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset ( dis posable : ĠDis posable ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Holder ( Holder ( dis posable )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Holder ( holder : ĠH older ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġref ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get AndUpdate Ġ{ Ġold Holder Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( old Holder Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder ?. dispose () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . dispose () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠH older ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdis posable : ĠDis posable ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġdispose () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdis posable ?. dispose () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }