2016-07-02
Packagecom.java1995;Importjava.util.List;/*** Producer * *@authorAdministrator **/ Public classProducerextendsThread {PrivateList<integer>list; Private intMax; //Construction Method PublicProducer (String name,intMax, list<integer>list) { Super(name); This. Max =Max; This. List =list; } Public voidrun () { while(true) { synchronized(list) { while(list.size () = =max) {System.out.println ("The Warehouse is full"); Try{list.wait ();//thread Hangs}Catch(interruptedexception e) {//TODO auto-generated Catch blockE.printstacktrace (); } } //the following program intnum = (int) (Math.random () * 100); List.add (num); System.out.println ( This. GetName () + "produced:" +num); //producers inform consumers that they have inventory and can consumeList.notifyall (); } } }}
Packagecom.java1995;Importjava.util.List;/*** Consumer * *@authorAdministrator **/ Public classConsumerextendsThread {PrivateList<integer>list; Private intMax; PublicConsumer (String name,intMax, list<integer>list) { Super(name); This. Max =Max; This. List =list; } Public voidrun () { while(true) { synchronized(list) { while(List.isEmpty ()) {System.out.println ("The warehouse is empty."); Try{list.wait (); } Catch(interruptedexception e) {//TODO auto-generated Catch blockE.printstacktrace (); }} System.out.println ( This. GetName () + "spending:" + list.get (List.size ()-1)); List.remove (List.size ()-1); //consumers inform producers that warehouses are emptyList.notifyall (); ; } } }}
Packagecom.java1995;Importjava.util.ArrayList;Importjava.util.List;/*** Test class * *@authorAdministrator **/ Public classTest { Public Static voidMain (string[] args) {List<Integer> list =NewArraylist<integer>(); intmax = 100; Producer P=NewProducer ("producer", Max, list); Consumer C=NewConsumer ("Consumer", Max, list); P.start (); C.start (); }}
Resources
[1] Java Easy Start Classic tutorial "full version"
Java section 62nd producer consumer model