public Consumer(Shop shop) {

// TODO Auto-generated constructor stub

this.shop=shop;

new Thread(this,“消费者线程”).start();

}

@Override

public void run() {

// TODO Auto-generated method stub

while(true){

shop.get();

}

}

}

共享对象Shop.java定义

public class Shop {

int no;

boolean hasData=false; //false表示无数据 true有数据

synchronized int get(){ //消费产品

if(hasData==false){

try {

wait();//消费者线程暂停

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

System.out.println(“消费:”+no);

hasData=false;//消费完了。通知生产

notify();

return no;

}

synchronized void put(int no){ //放产品

if(hasData==true){

try {

wait();

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

System.out.println(“生产:”+no);

hasData=true;

this.no=no;

notify();

}

}

测试类PC.java

public class PC {

public static void main(String[] args) {

Shop shop=new Shop();

new Producer(shop);

new Consumer(shop);

}

}

以上生产消费者问题很好的说明了wait和notify方法的用途,其他方法的变种例如wait(long timeout)就好理解了,如果超过指定时间等待的线程也会进入等待集合而不用再等待。

责任编辑:ct

关于嵌入式技术就介绍完了,您有什么想法可以联系小编。