我在将一个后台线程至于executor中,并使用executor.shutdown(),并且无法终止进入死循环的线程,因为他只会等任务完成。,但是JVM并未退出。
后台线程run方法:
while (true) {
Protocol protocol;
try {
protocol = protocolsQueue.take();
protocol.execute(this);
} catch (InterruptedException e) {
logger.debug("收到服务器中断命令,退出执行协议线程");
}
}
后来发现时 BlockingDeque的take()将线程阻塞了。便使用executor.shutdownNow(),该方法会发出中断信号。正如前面的代码,take()要捕捉中断异常。代码改为如下:
@Override
public void run() {
while (running) {
Protocol protocol;
try {
protocol = protocolsQueue.take();
protocol.execute(this);
} catch (InterruptedException e) {
logger.debug("收到服务器中断命令,退出执行协议线程");
running = false;
}
}
}
分享到:
相关推荐
java.util.concurrent.BlockingDeque API介绍和简单案例
一个线程从A表读数据放入队列 N个线程从队列中取出数据,找到其在子表中的数据 对子表中的数据开3种线程:读,发email,标记状态 N个线程对完成的A表数据做最后处理 支持大数据量跑批,就是个例子,本来是公司发送...
`BlockingDeque`相比于`BlockingQueue`增加了更多的灵活性,例如,`offerFirst()`, `offerLast()`, `peekFirst()`, `peekLast()`等方法,分别用于在队列的前端和后端进行操作。 在实际应用中,`BlockingQueue`和`...
**BlockingDeque(阻塞双端队列)**:在JUC中,`BlockingDeque`是一种线程安全的双端队列,可以用于生产者-消费者模型。与`BlockingQueue`类似,它允许一个线程生产对象,另一个线程消费对象,但`BlockingDeque`允许...
同步队列 SynchronousQueue,阻塞双端队列 BlockingDeque, 链阻塞双端队列 LinkedBlockingDeque,并发 Map(映射) ConcurrentMap, 并发导航映射 ConcurrentNavigableMap,交换机 Exchanger, 信号量 Semaphore,执行器...
8. 阻塞双端队列 BlockingDeque 9. 链阻塞双端队列 LinkedBlockingDeque 10. 并发 Map(映射) ConcurrentMap 11. 并发导航映射 ConcurrentNavigableMap 12. 闭锁 CountDownLatch 13. 栅栏 CyclicBarrier 14. 交换机 ...
8. 阻塞双端队列 BlockingDeque 9. 链阻塞双端队列 LinkedBlockingDeque 10. 并发 Map(映射) ConcurrentMap 11. 并发导航映射 ConcurrentNavigableMap 12. 闭锁 CountDownLatch 13. 栅栏 CyclicBarrier 14. 交换机 ...
阻塞双端队列 BlockingDeque 9. 链阻塞双端队列 LinkedBlockingDeque 10. 并发 Map(映射) ConcurrentMap 11. 并发导航 映射 ConcurrentNavigableMap 12. 闭锁 CountDownLatch 13. 栅栏 CyclicBarrier 14. 交换机 ...
在这个大总结中,我们将重点关注Java中的两种重要并发工具:信号量(Semaphore)和阻塞队列(BlockingQueue),以及相关的阻塞栈(BlockingDeque)。 首先,信号量是一个用于控制对共享资源访问的计数器。它允许...
3. BlockingQueue和BlockingDeque:这两个接口提供了线程安全的队列操作,如ArrayBlockingQueue、LinkedBlockingQueue和PriorityBlockingQueue实现了BlockingQueue接口,而LinkedBlockingDeque实现了BlockingDeque...
除了阻塞队列,Java 6还引入了阻塞栈(BlockingDeque),它继承自`java.util.concurrent.BlockingDeque`接口。阻塞栈的行为类似于阻塞队列,但其数据访问遵循“后进先出”(LIFO)的原则,即最后入栈的元素最先出栈...
8. 阻塞双端队列 BlockingDeque 9. 链阻塞双端队列 LinkedBlockingDeque 10. 并发 Map(映射) ConcurrentMap 11. 并发导航映射 ConcurrentNavigableMap 12. 闭锁 CountDownLatch 13. 栅栏 CyclicBarrier 14. 交换机 ...
8. 阻塞双端队列 BlockingDeque 9. 链阻塞双端队列 LinkedBlockingDeque 10. 并发 Map(映射) ConcurrentMap 11. 并发导航映射 ConcurrentNavigableMap 12. 闭锁 CountDownLatch 13. 栅栏 CyclicBarrier 14. 交换机 ...
阻塞栈,即阻塞双端队列(BlockingDeque),在Java中由`LinkedBlockingDeque`实现。它同时具备队列和栈的特点,允许在两端进行插入和删除操作。与阻塞队列类似,当栈为空或满时,操作会阻塞,从而实现了线程间的同步...
- **定义**:实现了BlockingDeque接口,是一个可测量的、并发的、基于链接节点的Deque。 - **特点**: - 支持FIFO模式。 - 模块化的设计使其具有良好的扩展性和性能表现。 - **AbstractMap.SimpleEntry** 和 **...