This article refers to some examples on the Internet, using the synchronized and object Wait/notify method to achieve.
First, define 3 classes, one is the container class, the property has the container maximum capacity and the current capacity;
The other two are producers and consumers, each with a production method and a consumption method (all implemented in the respective run method, preferably drawn out as a separate method)
Package Test3;class container{public int max;//define container maximum capacity public int currentnum;//Define container current capacity public Container (int max) { This.max = Max;currentnum = 0;}} Class Producer implements Runnable{public Container con;public Producer (Container con) {this.con = con;} public void Run () {while (true) {//There are countless Apple synchronized (Con) {if (Con.currentnum < Con.max) {///If the current container is not satisfied, you can produce con.notify ( );//production of the notification and release of the lock con.currentnum++; System.out.println ("Producer is producing ... +1, current number of products:" +con.currentnum);} else if (Con.currentnum = = Con.max) {//system.out.println ("the box is saturated, the producer stops production, is waiting for consumption ..."); try {con.wait ();} catch (Interruptedexception e) {e.printstacktrace ();}} If else If}//syn executes a synchronous block release lock, the output is two successive occurrences of the producer because: after releasing the lock, if there is no waiting thread, then it executes the synchronization block of the thread first to execute it try {thread.sleep (100);//adjust producer frequency, Too quickly and easily sudden death ~} catch (Interruptedexception e) {e.printstacktrace ();} Try}//while}}class Consumer implements Runnable{public Container con;public Consumer (Container con) {this.con = con;} public void Run () {while (true) {synchronized (con) {if (Con.currentnum > 0) {con.notify (); Con.currentnum--; SYSTEM.OUT.PRINTLN ("Consumer is spending ...-1, current product number:" +con.currentnum);} else if (Con.currentnum = = 0) {System.out.println ("The box is empty, the consumer stops consuming, is waiting for production ..."); try {con.wait ();} catch (Interruptedexception e) {e.printstacktrace ();}} else If}//syntry {thread.sleep (140);//Adjust the consumer frequency, too fast easy to die ~ ~} catch (Interruptedexception e) {e.printstacktrace ();} try}//while}//Run}public class Testproducerconsumer{public static void Main (String args[]) {Container Container = new C Ontainer (5);//define box maximum capacity, here is 5Producer producer = new producer (container);//The number of apples in the box is synchronized, so the box object reference is passed as a parameter to the producer and consumer consumer consumer = new Consumer (container),//new Thread (producer, "producer"). Start ();//Start production consumption mode new Thread (consumer, " Consumer "). Start ();}}
Program output:
Producers are producing ... +1, current number of products: 1 consumers are consuming ...-1, current product: 0 producers are producing ... +1, current product: 1 Consumers are consuming ...-1, current product: 0 producers are producing ... +1, current product: 1 consumers are consuming ... -1, Current product: 0 producer is producing ... +1, current product number: 1 consumer is consuming ...-1, current product: 0 producer is producing ... +1, current product: 1 producer is producing ... +1, current product: 2 consumer is consuming ...-1, current product: 1 Producers are producing ... +1, current number of products: 2 consumers are consuming ...-1, current product: 1 producers are producing ... +1, current product: 2 Consumers are consuming ...-1, current product: 1 producers are producing ... +1, current product: 2 producers are producing ... +1, Current product: 3 consumer is consuming ...-1, current product number: 2 producer is producing ... +1, current product: 3 consumer is consuming ...-1, current product: 2 producer is producing ... +1, current product: 3 consumer is consuming ...-1, current product number: 2 Producers are producing ... +1, current products: 3 consumers are consuming ...-1, current product: 2 producers are producing ... +1, current product: 3 producers are producing ... +1, current product: 4 Consumers are consuming ...-1, current product: 3 producers are producing ..... +1, Current product: 4 consumer is consuming ...-1, current product number: 3 producer is producing ... +1, current product: 4 consumer is consuming ...-1, current product: 3 producer is producing ... +1, current product: 4 producer is producing ... +1, current product: 5 Consumers are spending ...-1, current product: 4 producers are producing ... +1, current products: 5 consumers are consuming ...-1, current product: 4 producers are producing ... +1, current product: 5 Consumers are consuming ...-1, current product: 4 producers are producing ... +1, Current product: 5 consumer is consuming ...-1, current product: 4 producer is producing ... +1, current product: 5 The box is already saturated, the producer stops producing and is waiting for consumption ... Consumers are spending ...-1, current product number: 4 producers are producing ... +1, current products: 5 consumers are consuming ...-1, current product: 4 producers are producing... +1, current product: 5 Consumers are spending ...-1, current product number: 4 producer is producing ... +1, current product: 5 consumer is consuming ...-1, current product: 4 producer is producing ... +1, current product number: 5 The box is saturated, the producer stops producing, Waiting to be consumed ... Consumers are spending ...-1, current product: 4 producers are producing ... +1, current products: 5 consumers are consuming ...-1, current product: 4 producers are producing ... +1, current product: 5 Consumers are consuming ...-1, current product: 4 producers are producing ... +1, Current product: 5 consumer is consuming ...-1, current product: 4 producer is producing ... +1, current product: 5 The box is already saturated, the producer stops producing and is waiting for consumption ... Consumers are spending ...-1, current product: 4 producers are producing ... +1, current products: 5 consumers are consuming ...-1, current product: 4 producers are producing ... +1, current product: 5 Consumers are consuming ...-1, current product: 4 producers are producing ... +1, Current product: 5 consumer is consuming ...-1, current product: 4 producer is producing ... +1, current product: 5 The box is already saturated, the producer stops producing and is waiting for consumption ... Consumers are spending ...-1, current product: 4 producers are producing ... +1, current products: 5 consumers are consuming ...-1, current product: 4 producers are producing ... +1, current product: 5 Consumers are consuming ...-1, current product: 4 producers are producing ... +1, Current product: 5 consumer is consuming ...-1, current product: 4 producer is producing ... +1, current product: 5 The box is already saturated, the producer stops producing and is waiting for consumption ... Consumers are spending ...-1, current product: 4 producers are producing ... +1, current number of products: 5 consumers are consuming ...-1, current product: 4 producers are producing ... +1, current product number: 5
Java Multithreading implements producer consumer issues (Wait/notify)