public class Main {
public static void main(String[] args) {
MyResource resource = new MyResource(new ArrayBlockingQueue<>(10));
new Thread(() -> {
try {
resource.producer();
} catch (Exception e) {
e.printStackTrace();
}
}).start();
new Thread(() -> {
try {
resource.consumer();
} catch (Exception e) {
e.printStackTrace();
}
}).start();
try {
TimeUnit.MINUTES.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
resource.stop();
}
}
class MyResource {
private volatile boolean flag = true;
private AtomicInteger num = new AtomicInteger(0);
private BlockingQueue<String> queue;
public MyResource(BlockingQueue<String> queue) {
this.queue = queue;
}
public void producer() throws Exception {
String data;
boolean result;
while (flag) {
data = num.getAndIncrement() + "";
result = queue.offer(data, 2L, TimeUnit.SECONDS);
if (result) {
System.out.println(Thread.currentThread().getName() + "\t插入队列数据" + data + "成功!");
} else {
System.out.println(Thread.currentThread().getName() + "\t插入队列数据" + data + "失败!");
}
TimeUnit.SECONDS.sleep(1);
}
System.out.println("Producer运行结束!");
}
public void consumer() throws Exception {
String data;
while (flag) {
data = queue.poll(2L, TimeUnit.SECONDS);
if (data != null) {
System.out.println(Thread.currentThread().getName() + "\t取出队列数据" + data + "成功!");
} else {
System.out.println(Thread.currentThread().getName() + "\t取出队列数据" + data + "失败!");
}
TimeUnit.SECONDS.sleep(1);
}
System.out.println("Consumer运行结束!");
}
public void stop() {
flag = false;
}
}