热门课程

免费试听

上课方式

开班时间

当前位置: 首页 -   文章 -   根域文章 -   正文

说到java的塞队列,我们会想到javajdk中有这么多类别

zhiliaoadmin
2021-03-12 14:42:14
0

说到java的塞队列,我们会想到javajdk中有这么多类别。

1.ArrayDeque(数组双端队列)2.PriorityQueue(优先队列)3.ConcurentLinkedQue(以链表为基础的并发队列)4.DelayQue(延期堵塞队列)(堵塞队列实现了BlockingQue接口)5.ArrayBlockingQueue(数组并发堵塞队列)6.LinkedblockedblingQue接口)5.ArrayBlockingQuengQue(数组并发堵塞队列)6.LinkedblockedblingQuengQueyQue)

这里不是详细说明的,而是从线程池的异常说明。

结构线程池异常-线程池过载异常。

(标题){标题}{标题{标题}{标题}{标题{标题}{标题{标题}(2,2,1000,标题}

这个代码直接运行的话会出现异常。

工作室/工作室/工作室

总结一下:其实,这个问题是,由于加入的线程数超过了整个线程池能够负荷的最大数量(新建线程池时使用了有界队列),所以发生了异常。

避免线程池溢出异常-使用无界队列和有界队列。

BlockingQueue。

这是为了解决java并发同步问题,本质上是为了解决线间信息同步而设计的。

有几个类别:

1.DelayQueue(延期堵塞队列)(堵塞队列实现了BlockingQue接口)这个队列是无界的,没有指定长度的构造方法2.ArrayBlockingQueue(基于几组并发堵塞队列)必须设定长度3.LinkedBlockingQueue(基于链表的FIFO堵塞队列)没有指定长度的相反,有界限的4.LinkedblockedBlockingDequequeue)只能指定长度的相反,没有界定长度的5.LinkerayQuequequequequequeuequequeue。

回来看看上面的源代码。其实线程池加入线程时的逻辑是这样的。

建立常驻线程coreNum指定,超过时建立临时线程maxNum,还不够,增加到队列中。

线程池判断能否增加只有对列是使用的队列的offset方法。

publicvoidexecute(Runnablecomand){if(comand==null)thrownewnullPointexception();if(workerCountOf(c)如果是有界的队列党对列,自然会回到false,因为不能追加,所以会出现异常。

总结一下。

使用java线程池时,需要制定容量计划,如果无法确定是否超过指定的线程数量,则可以使用无界队列,但必须注意防止内存泄漏。


预约申请试听课
大家都在看

知了堂就业保险已到账,请考研学子查收

2021-03-12 浏览次数:0

小白学前端一般学多久?零基础菜鸟的学成之路

2021-03-12 浏览次数:0

数据中心网络分区规划与架构

2021-03-12 浏览次数:0

知了堂为成都理工大学计网学子带来行业岗位分享及项...

2021-03-12 浏览次数:0

在成都进入培训机构学习前端需要怎么选择培训机构?

2021-03-12 浏览次数:0

发展信创产业是保障国家安全的必然举措

2021-03-12 浏览次数:0
最新资讯