Programme one:
Public classPRINTABC { Public Static voidMain (string[] args) {Atomicinteger synobj=NewAtomicinteger (0); Runnable R=NewThreadModel (synobj); NewThread (R,"A"). Start (); NewThread (R,"B"). Start (); NewThread (R,"C"). Start (); }} Public classThreadModel implements Runnable { Public volatileAtomicinteger ATO; PublicThreadModel (Atomicinteger ato) { This. ATO =ATO;} Public voidrun () { for(intI=0;i<Ten; i++) {synchronized (ATO) {if(ATO.Get()%3==0) {System. out. println ("A);Ato.Set(ATO.Get()+1); Ato.notifyall (); } Else if(ATO.Get()%3==1) {System. out. println ("B);Ato.Set(ATO.Get()+1); Ato.notifyall (); } Else if(ATO.Get()%3==2) {System. out. println ("C);Ato.Set(ATO.Get()+1); Ato.notifyall (); } Else{ato.wait (); } } } }}
Scenario Two:
Public classPRINTABC { Public Static voidmain (String [] args) {Atomicinteger ato=NewAtomicinteger (0); ThreadModel Modela=NewThreadModel (ATO,"A",0); ThreadModel Modelb=NewThreadModel (ATO,"B",0); ThreadModel MODELC=NewThreadModel (ATO,"C",0); NewThread (Modela). Start (); NewThread (Modelb). Start (); NewThread (MODELC). Start ();} } Public classThreadModel {PrivateAtomicinteger ATO; PrivateString Printchar; Private intFlag; Private intCount =0; PublicThreadModel (Atomicinteger ato,string Printchar,intflag) { This. ATO =ATO; This. Printchar =Printchar; This. Flag =Flag; } Public voidRun () {synchronized (ATO) { while(true) { if(ATO.Get()%3==flag) {System. out. println (Printchar); ATO.Set(ATO.Get()+1); Ato.notifyall (); Count++; if(count==Ten) { Break; } }Else{ato.wait (); } } } } }
The wait/notify of the exercises