美文网首页
如何停止被BlockingQueue阻塞的线程

如何停止被BlockingQueue阻塞的线程

作者: 零壹视界 | 来源:发表于2019-09-29 21:53 被阅读0次

如下阻塞队列+线程的代码,很常见,当服务停止时,如何停止被BlockingQueue阻塞的线程?

BlockingQueue<Integer> blockingQueue = new ArrayBlockingQueue(10);
final Thread thread = new Thread(new Runnable() {
    @Override
    public void run() {
        while (true) {
            try {
                Integer el = blockingQueue.take();
                System.out.println(el);
            } catch (InterruptedException e) {

            }
        }
    }
});

方法是当服务停止时,触发一个操作,给blockingQueue放一个特殊的元素,如上面,传一个值为-1的元素代表停止事件,线程取到这个特殊元素时就跳出循环:

final int STOP_CODE = -1;
BlockingQueue<Integer> blockingQueue = new ArrayBlockingQueue(10);
final Thread thread = new Thread(new Runnable() {
    @Override
    public void run() {
        while (true) {
            try {
                Integer el = blockingQueue.take();
                // quit loop when receive stop event
                if (STOP_CODE == el) {
                    break;
                }
                //do something useful
                System.out.println(el);
            } catch (InterruptedException e) {

            }
        }
    }
});

相关文章

  • 如何停止被BlockingQueue阻塞的线程

    如下阻塞队列+线程的代码,很常见,当服务停止时,如何停止被BlockingQueue阻塞的线程? 方法是当服务停止...

  • 阻塞队列

    BlockingQueue线程池的数据结构是阻塞队列BlockingQueue。(在多线程领域:所谓阻塞,在某些情...

  • 26. 并发终结之BlockingQueue

    线程池里面最重要的还有个并发容器,即阻塞队列BlockingQueue。BlockingQueue是阻塞队列的接口...

  • 线程池核心类ThreadPoolExecutor源码解析

    成员变量 BlockingQueue 任务阻塞队列corePoolSize 核心线程数maximumPoolSi...

  • Java多线程 -- 05 线程通信

    导读目录: 传统的线程通信 使用Condition控制线程通信 使用阻塞队列(BlockingQueue)控制线程...

  • java多线程之BlockingQueue

    BlockingQueue在java的concurrent 包中,是一个阻塞队列,解决了多线程中,如何高效安全“传...

  • BlockingQueue简析

    BlockingQueue BlockingQueue是一个阻塞队列。在高并发场景是用得非常多的,在线程池中。如果...

  • 2.BlockingQueue综合分析

    BlockingQueue BlockingQueue是一个线程安全的阻塞队列,一般是FIFO(先进先出),是各种...

  • ArrayBlockingQueue实现原理

    概述 ArrayBlockingQueue是常用的的FIFO阻塞队列,实现了BlockingQueue接口,是线程...

  • 阻塞队列

    BlockingQueue 阻塞线程 1.放入数据 offer(anObject):表示如果可能的话,将anObj...

网友评论

      本文标题:如何停止被BlockingQueue阻塞的线程

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