使用Java BlockingQueue实现的生产者和消费者
1.定义生产者
class Producer implements Runnable {
private BlockingQueue<String> queue;
private String id;
private volatile boolean isRunning = true;
private static AtomicInteger count = new AtomicInteger();
public Producer(BlockingQueue<String> queue, String id) {
this.queue = queue;
this.id = id;
}
public void stop() {
isRunning = false;
}
@Override
public void run() {
String data = null;
try {
while (isRunning) {
System.out.println("PRODUCER: " + id + " is running");
Thread.sleep(100);
data = "data:" + count.incrementAndGet();
System.out.println("Thread: " + id + " procedued data into queue: " + data + " ...");
if (!queue.offer(data, 2, TimeUnit.SECONDS)) {
System.out.println("failed to put data into queue: " + data);
}
}
} catch (InterruptedException e) {
e.printStackTrace();
Thread.currentThread().interrupt();
} finally {
System.out.println("Thread: " + id + " quit from producer thread");
}
}
}
2.定义消费者
class Consumer implements Runnable {
/**
* 用util.concurrent.BlockingQueue沟通生产者和消费者的桥梁
*/
private BlockingQueue<String> queue;
private String id;
private