为了账号安全,请及时绑定邮箱和手机立即绑定

Java的线程池为什么要用阻塞队列呢?

Java的线程池为什么要用阻塞队列呢?

汪汪一只猫 2019-01-18 20:07:46
线程池为什么要用阻塞队列呢?使用一般的队列也能完整任务啊?
查看完整描述

3 回答

?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

阻塞队列主要是用于生产者-消费者模型的情况。
比如一个线程从一个空的阻塞队列中取元素,此时线程会被阻塞直到阻塞队列中有了元素。当队列中有元素后,被阻塞的线程会自动被唤醒(不需要我们编写代码去唤醒)。这样提供了极大的方便性。
如果使用非阻塞队列,它不会对当前线程产生阻塞,就必须额外地实现同步策略以及线程间唤醒策略,这个实现起来就非常麻烦。

查看完整回答
1 反对 回复 2019-02-12
?
慕森卡

TA贡献1806条经验 获得超8个赞

一般的队列只能保证作为一个有限长度的缓冲区,如果超出了缓冲长度,就无法保留当前的任务了,阻塞队列通过阻塞可以保留住当前想要继续入队的任务。

查看完整回答
反对 回复 2019-02-12
?
MM们

TA贡献1886条经验 获得超2个赞

简单的一个场景,消费者一端不一定是时时提交任务就能马上执行,可能有很多因素,比如计算或者IO等资源没办法马上就位,所以有等待,但是任务队列也不一定就无限大,所以才有了阻塞队列,在任务池已满且队列已经有很多任务时,需要阻塞等待

查看完整回答
反对 回复 2019-02-12
  • 3 回答
  • 0 关注
  • 3218 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信