生产者消费者问题
Posted superxuezhazha
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了生产者消费者问题相关的知识,希望对你有一定的参考价值。
思路:
生产者判读是否大于20: 若 否,则生产一个产品并且唤醒(消费者).若是,则堵塞.
消费者判读是否大于0,若是,则消费一个产品,并唤醒(生产者).若否,则堵塞.
我们将生产和消费的方法,放到店员类,这样可以操作共享数据.
package com.LearnJava.Thread; class Clerk { private int products=0; public synchronized void prodectOne(){ if(products<20){ products++; System.out.println(Thread.currentThread().getName()+"生产第"+products+"个产品"); notifyAll(); }else { try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } public synchronized void consumeOne(){ if(products>0){ System.out.println(Thread.currentThread().getName()+"消费第"+products+"个产品"); products--; notifyAll(); }else { try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } } class Productor extends Thread{ private Clerk c; Productor(Clerk c){ this.c=c; } @Override public void run() { while (true){ c.prodectOne(); try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } } } } class Customer extends Thread{ private Clerk c; Customer(Clerk c){ this.c=c; } @Override public void run() { while (true){ c.consumeOne(); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } } } public class PCCProblem { public static void main(String[] args) { Clerk c = new Clerk(); Productor p1 = new Productor(c); Productor p2 = new Productor(c); Customer c1 = new Customer(c); p1.start(); p2.start(); c1.start(); } }
以上是关于生产者消费者问题的主要内容,如果未能解决你的问题,请参考以下文章
请问如何用C语言实现“生产者与消费者问题”?(最好附上完整的C语言源代码)