public class TestMain {
//定义一个阻塞队列
static BlockingQueue<Object> queue = new ArrayBlockingQueue<>(10);
static AtomicInteger producerNumber = new AtomicInteger(0);
static AtomicInteger consumerNumber = new AtomicInteger(0);
//定义一个标志位
static boolean flag = true;
//生产者线程
static class Producer implements Runnable {
@Override
public void run() {
while (flag) {
try {
//生产消息
queue.put(new Object());
System.out.println(Thread.currentThread().getName() + "生产了第" + (producerNumber.incrementAndGet()) + "件商品");
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
//消费者线程
static class Consumer implements Runnable {
@Override
public void run() {
while (flag) {
try {
//消费者消费
queue.take();
TimeUnit.SECONDS.sleep(1);
System.out.println(Thread.currentThread().getName() + "消费了第" + (consumerNumber.incrementAndGet()) + "件商品");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
Thread producerThread = new Thread(new Producer(), "生存者线程");
Thread consumerThread = new Thread(new Consumer(), "消费者线程");
producerThread.start();
consumerThread.start();
//生产消费的行为只做5秒
try {
TimeUnit.SECONDS.sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
flag = false;
}
}
运行结果如下:
总结
从运行结果来看,成功的使用BlockingQueue实现了生产者消费者模式。