package Ġcom . android . example . li ved atab u ilder . kt Ċ Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . locks . Re entrant Lock Ċ Ċ /** ĊĊ Ġ* Ġ@ Author : Ġch en ĊĊ Ġ* Ġ@ datetime : Ġ 2 0 2 0 / 8 / 1 4 ĊĊ Ġ* Ġ@ desc : ĊĊ Ġ*/ Ċ class ĠTask Queue Ġ{ ĊĊĠĠĠ Ġvar Ġlock Ġ= ĠRe entrant Lock () ĊĊĠĠĠ Ġvar Ġcondition Ġ= Ġlock . new Condition () ĊĠĠĠ Ġprivate Ġvar Ġqueue Ġ= ĠLinkedList < String >() ĊĊĊĠĠĠ Ġfun Ġadd Task ( s Ġ: ĠString ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġlock . lock () ĊĊĠĠĠĠĠĠĠ Ġprintln (" produce Ġ[ add Task ] Ġs :${ s }, thread Name :${ Thread . currentThread (). name }") ĊĊĠĠĠĠĠĠĠ Ġqueue . add ( s ) ĊĊĠĠĠĠĠĠĠ Ġcondition . signal All () ĊĊĠĠĠĠĠĠĠ Ġlock . unlock () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Task (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġlock . lock () ĊĊĠĠĠĠĠĠĠ Ġwhile ( queue . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" queue Ġis Ġempty ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcondition . await () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġqueue . poll () ĊĠĠĠĠĠĠĠ Ġprintln (" consume Ġ[ get Task ] Ġs :${ s }, thread Name :${ Thread . currentThread (). name }, queue Ġsize :${ queue . size }") ĊĠĠĠĠĠĠĠ Ġlock . unlock () ĊĠĠĠĠĠĠĠ Ġreturn Ġs ĊĠĠĠ Ġ} ĊĊ Ċ }