package zhq_stu.gaopin_kaodian;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
public class Product_cusmoer_blockqueue {
public static void main(String[] args) {
Mysource mysource = new Mysource(new ArrayBlockingQueue<>(5));
new Thread(new Runnable() {
@Override
public void run() {
mysource.prod();
}
},"生产线程").start();
new Thread(new Runnable() {
@Override
public void run() {
try {
mysource.consumer();
//System.out.println(123);
} catch (Exception e) {
e.printStackTrace();
}
}
},"消费线程").start();
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("main线程结束运行");
mysource.stop();
}
}
class Mysource{
private BlockingQueue<String> blockingQueue = null;
private volatile Boolean flage = true;
private AtomicInteger atomicInteger = new AtomicInteger();
public Mysource(BlockingQueue<String> blockingQueue){
this.blockingQueue=blockingQueue;
}
public void stop(){
flage=false;
}
public void prod(){
String data = null;
boolean returnData;
while (flage) {
data = atomicInteger.incrementAndGet()+"";
returnData = blockingQueue.offer(data);
if (returnData) {
System.out.println(Thread.currentThread().getName() + "生产者成功插入数据:" + data);
} else {
System.out.println(Thread.currentThread().getName() + "生产者插入数据失败:" + data);
}
try {
//Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
}
System.out.println("flage置为false,结束");
}
public void consumer() throws InterruptedException {
String data=null;
while (flage) {
data = blockingQueue.poll(2L, TimeUnit.SECONDS);
System.out.println("消费者取到的值为" + data);
if (data == null || "".equals(data)) {
flage=false;
System.out.println("超过2秒钟,退出!");
}
}
}
}