生产者消费者阻塞队列
2022-06-16 本文已影响0人
酷酷的美猴王
class MyResource {
private volatile boolean FLAG = true;
private AtomicInteger atomicInteger = new AtomicInteger();
BlockingQueue<String> blockingQueue = null;
public MyResource(BlockingQueue<String> blockingQueue ){
this.blockingQueue=blockingQueue;
}
public void myProducer() {
while (FLAG) {
String data = atomicInteger.incrementAndGet() + "";
boolean result = false;
try {
result = blockingQueue.offer(data, 2L, TimeUnit.SECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (result) {
System.out.println(Thread.currentThread().getName() + "生产队列" + data + "成功");
} else {
System.out.println(Thread.currentThread().getName() + "生产队列" + data + "失败");
}
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName() + "老板叫停");
}
public void myConsumer() {
while (FLAG){
String result= null;
try {
result = blockingQueue.poll(2L, TimeUnit.SECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (result == null || result.equalsIgnoreCase("")){
FLAG=false;
System.out.println(Thread.currentThread().getName()+"2s后取不到蛋糕,退出,消费叫停");
return;
}else {
System.out.println(Thread.currentThread().getName()+"消费队列"+result+"成功");
}
}
}
public static void main(String[] args) {
MyResource myResource = new MyResource(new ArrayBlockingQueue<>(10));
new Thread(() -> {
System.out.println(Thread.currentThread().getName()+"生产线程启动");
myResource.myProducer();
}, "producer").start();
new Thread(() -> {
System.out.println(Thread.currentThread().getName()+"消费线程启动");
System.out.println();
System.out.println();
myResource.myConsumer();
}, "comsumer").start();
try {
TimeUnit.SECONDS.sleep(5L);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"5秒钟后,生产叫停");
myResource.FLAG = false;
}
}