美文网首页
生产者消费者阻塞队列

生产者消费者阻塞队列

作者: 酷酷的美猴王 | 来源:发表于2022-06-16 19:05 被阅读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;
    }

}

相关文章

  • Android中的线程与线程池

    阻塞队列BlockingQueue 阻塞队列常用于生产者——消费者模型,生产者往阻塞队列插入数据,消费者往阻塞队列...

  • 什么是阻塞队列?如何使用阻塞队列来实现生产者-消费者模型?

    什么是阻塞队列?如何使用阻塞队列来实现生产者-消费者模型?

  • 生产者消费者

    生产者/消费者模式(阻塞队列) 生产者消费者模型的实现

  • 阻塞队列

    1.阻塞队列定义阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。...

  • java并发容器-BlockingQueue

    线程安全的阻塞队列,用来处理 生产者-消费者 问题。当队列容器满时,生产者线程被阻塞直到队列未满。当队列容器为空时...

  • 12:Java并发编程实战

    1:生产者和消费者模式下的并发案例 生产者和消费者之间通过阻塞队列来进行通信,阻塞队列相当于一个缓存区,平衡了生产...

  • (十三)J.U.C-BlockingQueue

    BlockingQueue阻塞队列 主要应用场景:生产者消费者模型,是线程安全的 阻塞情况: 1、当队列满了进行入...

  • Java阻塞队列源码(1)-ArrayBlockingQueue

    Java并发包下有个BlockingQueue接口,并提供了多种阻塞队列的实现方式。阻塞队列通常被用于生产者消费者...

  • 项目笔记5-KafKa

    目前最好的异步消息队列处理器 阻塞队列 写一个生产者消费者模式,使用阻塞队列 Kafka入门 消息持久化:消息永久...

  • Java 阻塞队列

    简介 java 的阻塞队列是应用在多线程中,尤其适合生产者和消费者模式,阻塞队列支持阻塞操作,线程安全,已经实现了...

网友评论

      本文标题:生产者消费者阻塞队列

      本文链接:https://www.haomeiwen.com/subject/dzvqvrtx.html