zoukankan      html  css  js  c++  java
  • 多线程--生产者/消费者

    /**
    * Created by Administrator on 2017/6/26.
    * 生产者/消费者问题
    * 生产者(Producer)将产品交给店员(Clerk),而消费者(Customer)从店员处取走产品,
    * 店员一次只能持有固定数量的产品,如果生产者试图生产更多的产品,
    * 店员会叫生产者停一下,如果店中有空位放产品了再通知生产者继续生产;
    * 如果店中没有产品了,店员会告诉消费者等一下,如果店中有产品了再通知消费者来取走产品。
    */
    public class TestProduct {
    public static void main(String[] args) {
    Clerk clerk = new Clerk();
    Producer p1 = new Producer(clerk);
    Thread t1 = new Thread(p1);
    Thread t2 = new Thread(p1);

    Customer c1 = new Customer(clerk);
    Thread t3 = new Thread(c1);

    t1.start();
    t2.start();
    t3.start();
    }
    }

    /**
    * 生产者类
    */
    class Producer implements Runnable{
    Clerk clerk;
    public Producer(Clerk clerk){ this.clerk=clerk; }
    @Override
    public void run() {
    System.out.println("生产产品");
    while (true){
    try {
    Thread.sleep((int)(Math.random() * 1000));
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    clerk.addProduct();
    }
    }
    }

    /**
    * 消费者类
    */
    class Customer implements Runnable{
    Clerk clerk;
    public Customer(Clerk clerk){ this.clerk=clerk;}

    @Override
    public void run() {
    System.out.println("消费产品");
    while (true){
    try {
    Thread.sleep((int)(Math.random() * 1000));
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    clerk.consumeProduct();
    }
    }
    }

    /**
    * 店员类
    */
    class Clerk{
    int product;
    public synchronized void consumeProduct(){
    if(product<=0){
    try {
    wait();
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }else{
    System.out.println(Thread.currentThread().getName()+":消费 "+product);
    product--;
    notifyAll();
    }
    }
    public synchronized void addProduct(){
    if(product>=20){
    try {
    wait();
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }else{
    product++;
    System.out.println(Thread.currentThread().getName()+": 生产 "+product);
    notifyAll();
    }
    }
    }
  • 相关阅读:
    sqlserver json 查询
    分页算法
    context.Response.AddHeader("Access-Control-Allow-Origin", context.Request.Headers["Origin"]); 这个方法是有问题的,AJAX跨域解决方案 在IE11中 context.Request.Headers["Origin"] 这段是获取不到值的。
    NativeWindow 妙用,截取windows消息
    屏蔽浏览器 F12
    linux常用基础命令40条
    shell之正则
    Go语言学习思路与开发软件VScode安装
    shell基础
    docker harbor安装失败
  • 原文地址:https://www.cnblogs.com/wjunxia/p/7082354.html
Copyright © 2011-2022 走看看