一个生产者消费者线程关闭的问题
看了很多网上的例子,都是启动相关线程就ok了。至于如何关闭相关线程,却没有这方面资料。
举例说明:
以消费者为例
public void run(){
while(status){
//访问队列
队列.getElement();
}
}
队列:
public Object getElement(){
if(isEmpty()){
this.wait();
}
//获取队列元素
}
上面是两个示例代码。status是一个布尔值,标识消费者线程的结束标志。如果为false,则线程结束。可能存在这样的情况,当判断完status为true时,此时消费者线程要访问队列,而这时status被设置为false。这就意味着消费者线程不会马上结束,还会调用队列的getElement()方法去获取元素。但是如果生产者线程已经停止,队列为空,则isEmpty()为true,此时消费者线程就会一直wait,导致该线程永远不会结束。因为此时的生产者线程已经over了,不会再有别的线程调用notify()来唤醒消费者线程。
不知道大家如何解决这个问题。