阻塞队列--生产者消费者-demo

 


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秒钟,退出!");
            }

        }
    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值