Suppose I want my 20 consumers to remove elements from ConcurrentLinkedQueue until their time quantum expires.That is i want each consumer to just run only once until its time slice reaches and then die. Following is my code but it is not working and consumers are not quitting from loop. Obviously it means that isInterrupted()
is not affected at time quantum expiry. How I can accomplish this task? Following is my consumer.
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");
}
}
And this is the producer
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");
}
}
}
And this is the main main class.
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();
}
}