从ConcurrentLinkedQueue轮询直到时间量程到期

时间:2015-11-28 15:11:54

标签: java multithreading concurrency producer-consumer

假设我希望我的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();
}
}

0 个答案:

没有答案