假设我希望我的20个消费者从ConcurrentLinkedQueue中删除元素,直到他们的时间量到期。这就是我希望每个消费者只运行一次,直到它的时间片到达然后消亡。以下是我的代码,但它不起作用,消费者不会退出循环。显然,这意味着isInterrupted()
在时间量子到期时不会受到影响。我怎么能完成这个任务?以下是我的消费者。
import java.util.concurrent.ConcurrentLinkedQueue;
public class Consumer extends Thread{
ConcurrentLinkedQueue<Object> queue;//=new ConcurrentLinkedQueue<Object>();
public Consumer(ConcurrentLinkedQueue<Object> queue){
this.queue=queue;
}
public void run(){
while(!isInterrupted()){
String s=(String)queue.poll();
}
System.out.println("Quitting");
}
}
这是制片人
import java.util.concurrent.ConcurrentLinkedQueue;
public class Producer extends Thread {
ConcurrentLinkedQueue<Object> queue;
public Producer(ConcurrentLinkedQueue<Object> queue){
this.queue=queue;
}
public void run(){
while(true){
queue.add("Hi");
}
}
}
这是主要的主要课程。
import java.util.concurrent.ConcurrentLinkedQueue;
public class ProducerConsumerTest {
ConcurrentLinkedQueue<Object> queue=new ConcurrentLinkedQueue<Object>();
public ProducerConsumerTest(){
Producer producer=new Producer(queue);
producer.start();
for(int i=1;i<=20;i++){
Consumer consumer=new Consumer(queue);
consumer.start();
}
}
public static void main(String d[]){
new ProducerConsumerTest();
}
}