package Ġcom . example . android _ study . Java . J uc ._ 2 _ wait _ notify Ċ Ċ import Ġcom . example . android _ study . Java . J uc ._ 1 _ lock . notify All Ċ import Ġcom . example . android _ study . Java . J uc ._ 1 _ lock . wait Ċ import Ġorg . junit . Test Ċ import Ġjava . util .* Ċ import Ġkotlin . concurrent . thread Ċ Ċ /** Ċ Ġ* ĠAuthor : Ġcreate Ġby ĠR hy thm Coder Ċ Ġ* ĠDate : Ġ 2 0 2 0 / 8 / 3 Ċ Ġ* ĠDescription : Ċ Ġ* Ċ Ġ* Ġ çĶŁäº§ æ¶Īè´¹ æ¨¡åŀĭ Ċ Ġ*/ Ċ class Ġ_ 3 Produce Custom Ġ{ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġt () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġqueue Ġ= ĠMessage Queue () ĊĠĠĠĠĠĠĠ ĠMutable List ( 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthread ( name Ġ= Ġ"> Ġæ ¶ Ī è´¹ èĢħ Ġ- Ġ$ it ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue . custom () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠMutable List ( 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthread ( name Ġ= Ġ" çĶŁäº§ èĢħ Ġ- Ġ$ it ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue . produce ( queue . Message ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsynchronized ( this ) Ġ{ Ġwait () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠMessage Queue Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġqueue Ġ= ĠLinkedList < Message >() ĊĊĠĠĠĠĠĠĠ Ġfun Ġcustom (): ĠMessage Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( queue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( queue . size Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("${ Thread . currentThread (). name } Ġæ ² ¡ æľī åķĨåĵģ äºĨ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue . wait () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm Ġ= Ġqueue . remove First () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( 9 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("${ Thread . currentThread (). name } Ġ åī © ä½Ļ åķĨåĵģ Ġ-- Ġ${ queue . size }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue . notify All () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġm ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġproduce ( message : ĠMessage ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( queue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( queue . size Ġ== Ġ 1 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("${ Thread . currentThread (). name } Ġ åķĨåĵģ å·² æ»¡ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue . wait () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue . add ( message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( 9 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("${ Thread . currentThread (). name } Ġ åī © ä½Ļ åķĨåĵģ -- ${ queue . size }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue . notify All () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinner Ġclass ĠMessage Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġo : ĠAny ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }