Java Reference
In-Depth Information
else {
System.out.format("%s: Handing off: %d%n",
name, nextNum);
System.out.format("%s: has a waiting consumer: %b%n",
name, tQueue.hasWaitingConsumer());
tQueue.transfer(nextNum); // A hand off
}
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
Listing 12-27 contains the code for a consumer that consumes elements from a TransferQueue . It sleeps for 1 to
5 seconds randomly and consumes an element from the TransferQueue .
Listing 12-27. A TQConsumer Class That Represents a Consumer for a TransferQueue
// TQConsumer.java
package com.jdojo.collections;
import java.util.Random;
import java.util.concurrent.TransferQueue;
public class TQConsumer extends Thread {
private final String name;
private final TransferQueue<Integer> tQueue;
private final Random rand = new Random();
public TQConsumer(String name, TransferQueue<Integer> tQueue) {
this.name = name;
this.tQueue = tQueue;
}
@Override
public void run() {
while (true) {
try {
// Sleep for 1 tp 5 random number of seconds
int sleepTime = rand.nextInt(5) + 1;
Thread.sleep(sleepTime * 1000);
int item = tQueue.take();
System.out.format("%s removed: %d%n", name, item);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
Search WWH ::




Custom Search