首先引入下面这段生产者和消费者的程序,店员类作为生产产品和消费产品的中介,其中的数据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
(#换成@)。