首页 > 代码库 > Java总裁-Java多线程
Java总裁-Java多线程
public class Clerk { private int product=0;//产品默认0; //生产者生成出来的产品交给店员 public synchronized void addProduct(){ if(this.product>=20){ try { wait();//产品已满,请稍等在生产 } catch (InterruptedException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } }else{ product++; System.out.println("生产者生产地"+product+"个产品。"); notifyAll(); //通知等待区的消费者今天取产品了 } } //消费者从店员处取产品 public synchronized void getProduct(){ if(this.product<=0){ try { wait();//产品没有货了,请稍等再取 } catch (InterruptedException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } }else{ System.out.println("消费者取走了第"+product+"个产品"); product--; notifyAll();//通知等待区的生成者可以生产 产品 } } } //消费者线程要执行的任务 public class Consumer implements Runnable { private Clerk cl; public Consumer(Clerk cl) { this.cl=cl; } public void run() { System.out.println("消费者开始取走产品!"); while(true){ try { Thread.sleep((int)(Math.random()*10)*100); } catch (InterruptedException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } cl.getProduct();//取走产品 } } }
/*
* 生产者、消费者问题
*
* 生产者讲产品交给电源,而消费者从店员出去走产品,店员一次只能持有固定数量的产品,
* 如果生产者生产了过多的产品,店员会叫生产者等一下,如果店中有空位放产品了在通知生产者继续生产;
* 如果店中没有了产品,店员会告诉消费者等一下,如果店中有产品了再通知消费者取走产品。
* 问题:
* 生产者比消费者快是,消费者会漏掉一些数据没有取到
* 消费者比生产者快时,消费者会取相同的数据
*
*/
public class Demo {
}
public class Main {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Clerk cl=new Clerk();
Thread prt=new Thread(new Producer(cl));//生产者线程
Thread cot=new Thread(new Consumer(cl));//消费者线程
prt.start();
cot.start();
}
}
Java总裁-Java多线程
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。