首页 > 代码库 > java 学习笔记 生产者与消费者
java 学习笔记 生产者与消费者
Object类对线程的支持——等待与唤醒
public final void wait() throws InterruptedException
public final void notify()
public final void notifyAll()
public class Test { public static void main(String[] args) { Basket basket = new Basket(); Producter p1 = new Producter("p1",basket); Producter p2 = new Producter("p2",basket); Consumer c1 = new Consumer("c1",basket); Consumer c2 = new Consumer("c2",basket); Thread t1 = new Thread(p1); Thread t2 = new Thread(p2); Thread t3 = new Thread(c1,"c1"); Thread t4 = new Thread(c2,"c2"); t1.start(); t2.start(); t3.start(); t4.start(); } }//定义面包类class Bread { int id; String info; Bread (String info,int id) { this.info = info; this.id = id; }}//定义容器类class Basket { int index = 0;//先进先出型 Bread bread; Bread br[] = new Bread[10];//定义一个数组,容量为6 public synchronized void putIn(Bread bread){ while (index == br.length) { try { this.wait(); }catch(InterruptedException e) { System.out.println("wait中被打断"); } } this.notify(); br[index] = bread; index++; System.out.println("(" + bread.info + "生产第" + bread.id + "个) " + "现有" + this.index + "个"); } public synchronized void takeOut(){ while(index == 0 ) { try { this.wait(); }catch(InterruptedException e) { System.out.println("wait中被打断"); } } this.notify(); index--; System.out.println(Thread.currentThread().getName() + "取走 " +"还剩" + index + " "); } }//定义生产者类class Producter implements Runnable { Basket basket = null; String name = null; int j = 0; public Producter(String name,Basket basket) { this.name = name; this.basket = basket; } public void run() { for (int i = 0;i <= 15;i++) { j = i + 1; Bread bread = new Bread(this.name,j);//不需要成员变量含有Bread类 ,直接new出来 basket.putIn(bread); } } }//定义消费者类class Consumer implements Runnable{ String name; Basket basket; public Consumer(String name,Basket basket){ this.name = name; this.basket = basket; } public void run() { for (int i = 0;i <= 15;i++) { basket.takeOut(); } } }/*1.在 for语句循环内,不要对循环变量i进行操作*/
java 学习笔记 生产者与消费者
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。