看,代码
package com.myself;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
class ProducerThread implements Runnable {
private BlockingQueue<String> blockingQueue;
private volatile boolean FLAG = true;
AtomicInteger atomicInteger = new AtomicInteger();
public ProducerThread(BlockingQueue<String> blockingQueue) {
this.blockingQueue = blockingQueue;
}
@Override
public synchronized void run() {
System.out.println("####生产者线程启动成功####");
try {
while (FLAG) {
String data = String.valueOf(atomicInteger.incrementAndGet());
boolean offer = blockingQueue.offer(data, 2, TimeUnit.SECONDS);
if (offer) {
System.out.println("生产者存入成功:" + data);
} else {
System.out.println("生产者存入失败:" + data);
FLAG = false;
}
Thread.sleep(5000);//生产一个产品的时间
}
} catch (Exception e) {
}
System.out.println("生产者线程结束");
}
}
// 消费者队列
class ConsumerThread implements Runnable {
private BlockingQueue<String> blockingQueue;
private volatile boolean FLAG = true;
public ConsumerThread(BlockingQueue<String> blockingQueue) {
this.blockingQueue = blockingQueue;
}
@Override
public synchronized void run() {
System.out.println("#####消费者线程启动了#####");
while (FLAG) {
try {
Thread.sleep(1000);//消费一个产品的时间
String data = blockingQueue.poll(2, TimeUnit.SECONDS);
if (data == null) {
System.out.println("消费者超过两秒没有获取队列的信息");
FLAG = false;
}
System.out.println("消费者消费" + data);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("消费者停止");
}
}
public class Test004 {
public static void main(String[] args) {
BlockingQueue<String> blockingQueue = new LinkedBlockingQueue<String>(8);
ProducerThread producerThread = new ProducerThread(blockingQueue);
ConsumerThread consumerThread = new ConsumerThread(blockingQueue);
Thread thread = new Thread(producerThread);
Thread thread2 = new Thread(consumerThread);
thread.start();
thread2.start();
}
}
运行结果