Java Multithreading implements producer consumer issues (Wait/notify)

Source: Internet
Author: User

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)

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.