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
关于嵌入式技术就介绍完了,您有什么想法可以联系小编。