重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

Java多线程怎么自定义

本篇内容介绍了“Java多线程怎么自定义”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:申请域名虚拟主机、营销软件、网站建设、和硕网站维护、网站推广。

自定义线程如何做?

public ThreadPoolExecutor(int corePoolSize,
                      int maximumPoolSize,
                      long keepAliveTime,
                      TimeUnit unit,
                      BlockingQueue workQueue,
                      ThreadFactory threadFactory,
                      RejectedExecutionHandler handler) {
}

corePoolSize:核心线程数

maximumPoolSize:最大线程数

keepAliveTime + unit:线程回收时间

workQueue:任务较多时暂存到队列

threadFactory:执行程序创建新线程时使用的工厂

handler:超出线程池容量以及队列长度后拒绝任务的策略

线程池的工作原理:

提交任务,线程池中的线程数可以增长至corePoolSize,之后继续提交任务将暂存至队列中,如果队列满,则看是否能继续增长线程数至maximumPoolSize,超出后将进行拒绝策略处理。显然,如果采用无界队列,那么maximumPoolSize将失效,线程池中的线程最多就是corePoolSize个线程工作。

keepAliveTime + unit

这里涉及到线程池回收线程。简单来说,就是采用有界队列,导致corePoolSize满,队列满,不得已线程池的线程增长至maximumPoolSize,那么任务处理完毕后,线程池中多出corePoolSize的部分理应回收,那么等待多长时间,多长时间没有任务后在进行回收的问题就是由上面的参数决定。

固定线程池

特点:

无界队列,导致keepAliveTime/unit/maximumPoolSize失效,不存在拒绝;

随着任务的增长,线程数将固定在corePoolSize。

单线程池

特点:

无界队列+核心、最大线程数都是1。

打个简单比喻,任务来了,不管多少,那么有序的放着,工人只有一个,那就按照顺序处理任务就是了。就是一个单线程顺序处理任务的情况。

缓存线程池

特点:

一个比较特殊的队列:SynchronousQueue,没有容量可言,提交任务就意味着一直阻塞等待任务的线程立刻得到任务进行执行。说白了,就是不要暂存到队列中,任务直接提交给线程进行执行。由于任务无法暂存,因此缓存线程池会根据任务的实际情况,进行线程池的增长,直至maximumPoolSize(Integer.MAX_VALUE)。

注意到keepAliveTime被设置成了60S,意思就是说如果任务来了很多,缓存线程池创建了不少线程来对付它们,任务处理的差不多了,那么等待60S后,还没有任务需要处理,那么进行线程回收处理。

定时线程池

特点:

利用延时队列DelayedQueue(无界队列),完成线程池实现定时以及周期性执行任务的需要

拒绝策略

当线程池的任务缓存队列已满并且线程池中的线程数目达到maximumPoolSize,如果还有任务到来就会采取任务拒绝策略,通常有以下四种策略:

ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出 
RejectedExecutionException异常。
ThreadPoolExecutor.DiscardPolicy:也是丢弃任务,但是不抛出异常。
ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前面的任务,然后 
重新尝试执行任务(重复此过程)
ThreadPoolExecutor.CallerRunsPolicy:调用其他线程处理该任务

“Java多线程怎么自定义”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!


网页题目:Java多线程怎么自定义
网页地址:http://cqcxhl.cn/article/ggidoi.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP