专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

Producter and Consumer

 package pinx.thread;

 import java.util.LinkedList;
 import java.util.Queue;

 public class ProducerConsumer {

     Storage storage=null;
     Query query=null;
     public ProducerConsumer(int max){
         storage=new Storage(max);
         query=new Query();
     }

     public void start(){
         Producter producter=new Producter();
         Consumer consumer=new Consumer();
         Thread thread1=new Thread(producter);

         Thread thread2=new Thread(consumer);
         Thread thread3=new Thread(consumer);
         Thread thread4=new Thread(consumer);

         thread1.start();
         thread2.start();
         thread3.start();
         thread4.start();
     }

     /**
      * @param args
      */
     public static void main(String[] args) {
         ProducerConsumer pc=new ProducerConsumer(20);
         pc.start();
     }

     class Product {
         private int id;

         public Product(int id) {
             this.id = id;
         }

         public String toString() {
             return "Product " + this.id;
         }
     }

     class Query{
         public Query(){}
         public synchronized int get(){
             return -1;
         }
     }

     class Storage {
         Queue<Product> queue = null;
         int max = 0;

         public Storage(int max) {
             this.max = max;
             this.queue = new LinkedList<Product>();
         }

         public synchronized void push(Product product) {
             while (this.max == this.queue.size()) {
                 try {
                     this.wait();
                 } catch (InterruptedException e) {
                     e.printStackTrace();
                 }
             }
             this.queue.offer(product);
             System.out.println("Producter has generated a product :"
                     + product.toString());
             this.notifyAll();
         }

         public synchronized Product pop() {
             while (this.queue.isEmpty()) {
                 try {
                     this.wait();
                 } catch (InterruptedException e) {
                     e.printStackTrace();
                 }
             }
             Product product = this.queue.poll();
             System.out.println("Consumer has consumed a product :"
                     + product.toString()+" ~~~");
             return product;
         }
     }

     class Consumer implements Runnable {

         public void run() {
             while(true){
                 System.out.println(String.format("Producter get the query value : %d", query.get()));
                 storage.pop();
                 try {
                     Thread.sleep((int)(Math.random()*1000));
                 } catch (InterruptedException e) {
                     e.printStackTrace();
                 }
             }
         }
     }

     class Producter implements Runnable {

         public void run() {
             int index=0;
             while(true){
                 System.out.println(String.format("Producter get the query value : %d~~~~~~~~~~~~~~~~~~~", query.get()));
                 storage.push(new Product(++index));
                 try {
                     Thread.sleep((int)(Math.random()*1000));
                 } catch (InterruptedException e) {
                     e.printStackTrace();
                 }
             }
         }
     }

 }

文章永久链接:https://tech.souyunku.com/23772

未经允许不得转载:搜云库技术团队 » Producter and Consumer

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们