首页 > 代码库 > 线程之间的通信(卖面包)
线程之间的通信(卖面包)
package mianbao; import java.util.Random; public class TestBread { /** * @param args */ public static void main(String[] args) { Store store=new Store(); Maker m=new Maker(store); Saler s=new Saler(store); m.start(); s.start(); } } //面包店类 class Store{ int num=0;//面包的个数 Random r=new Random(); //生产面包 public synchronized void make(){ if(num==0){ num=r.nextInt(20)+1; System.out.println("面包生产完毕 共有"+num); } //通知消费者来卖面包,自己阻塞 this.notify(); try { this.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //销售面包 public synchronized void sale(){ if(num>0){ int i=r.nextInt(num)+1; System.out.println("销售面包数:"+i); num-=i; }else{ //通知生产者生产面包 this.notifyAll();//在这个程序里与notify()相同 try { this.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } //生产者线程 class Maker extends Thread{ Store s; public Maker(Store s) { super(); this.s = s; } public void run(){ while(true){ s.make(); try { Thread.sleep(500); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } class Saler extends Thread{ Store s; public Saler(Store s) { super(); this.s = s; } public void run(){ while(true){ s.sale(); try { Thread.sleep(500); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
线程之间的通信(卖面包)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。