你的位置:首页 > 软件开发 > Java > 【转】通过生产者消费者案例理解等待唤醒机制和虚假唤醒

【转】通过生产者消费者案例理解等待唤醒机制和虚假唤醒

发布时间:2017-02-19 12:00:29
首先引入下面这段生产者和消费者的程序,店员类作为生产产品和消费产品的中介,其中的数据product为共享数据,产品最多只能囤积5个,当产品达到5个还在生产时,就会提示“产品已满!”,类似地,如果产品只有0个了还在消费,会提示“缺货!”: 1 package concurrent; ...

【转】通过生产者消费者案例理解等待唤醒机制和虚假唤醒

首先引入下面这段生产者和消费者的程序,店员类作为生产产品和消费产品的中介,其中的数据product为共享数据,产品最多只能囤积5个,当产品达到5个还在生产时,就会提示“产品已满!”,类似地,如果产品只有0个了还在消费,会提示“缺货!”:

 1 package concurrent; 2  3 //店员类 4 class Clerk { 5   private int product = 0; 6  7   // 进货 8   public synchronized void get() { 9     if (product >= 5) {10       System.out.println("产品已满!");11     } else {12       System.out.println(Thread.currentThread().getName() + ":" + ++product);13     }14   }15 16   // 售货17   public synchronized void sale() {18     if (product <= 0) {19       System.out.println("缺货!");20     } else {21       System.out.println(Thread.currentThread().getName() + ":" + --product);22     }23   }24 }25 26 // 生产者类27 class Productor implements Runnable {28 29   private Clerk clerk;30 31   public Productor(Clerk clerk) {32     this.clerk = clerk;33   }34 35   @Override36   public void run() {37     for (int i = 0; i < 10; i++) {38       clerk.get();39     }40 41   }42 }43 44 //消费者类45 class Consumer implements Runnable {46 47   private Clerk clerk;48 49   public Consumer(Clerk clerk) {50     this.clerk = clerk;51   }52 53   @Override54   public void run() {55     for (int i = 0; i < 10; i++) {56       clerk.sale();57     }58   }59 }60 61 public class TestProductorAndConsumer {62 63   public static void main(String[] args) {64     Clerk clerk = new Clerk();65 66     Productor productor = new Productor(clerk);67     Consumer consumer = new Consumer(clerk);68 69     new Thread(productor,"Productor A").start();70     new Thread(consumer,"Consumer B").start();71   }72 }

 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:【转】通过生产者消费者案例理解等待唤醒机制和虚假唤醒

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录