文章目录
代码
public class TestProsumer {
// 货架可存放商品数量
private Integer goodsShelfSize = 10 ;
// 阻塞队列
private ArrayBlockingQueue queue = new ArrayBlockingQueue<Integer>(goodsShelfSize);
public static void main(String[] args) {
TestProsumer prosumer = new TestProsumer();
Producer producer = prosumer.new Producer();
Consumer consumer = prosumer.new Consumer();
new Thread(producer).start();
new Thread(consumer).start();
}
class Producer implements Runnable {
@Override
public void run() {
while (true) {
try {
queue.put(1);
System.out.println("生产者生产一件商品,当前货架位置剩余:" + (goodsShelfSize - queue.size()));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class Consumer implements Runnable {
@Override
public void run() {
while (true) {
try {
queue.take();
System.out.println("消费者买走一件商品,当前货架剩余商品数量:" + queue.size());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
使用阻塞队列就不需要再单独考虑同步和线程间通信的问题。