合理使用线程池以及线程变量

合理使用线程池以及线程变量,第1张

orgspringframeworkschedulingconcurrentThreadPoolTaskExecutor 是spring提供的线程池类

拒绝策略:

AbortPolicy:用于被拒绝任务的处理程序,它将抛出RejectedExecutionException

CallerRunsPolicy:用于被拒绝任务的处理程序,它直接在execute方法的调用线程中运行被拒绝的任务。

DiscardOldestPolicy:用于被拒绝任务的处理程序,它放弃最旧的未处理请求,然后重试execute。

DiscardPolicy:用于被拒绝任务的处理程序,默认情况下它将丢弃被拒绝的任务。

执行过程:

如果此时线程池中的数量小于corePoolSize,即使线程池中的线程都处于空闲状态,也要创建新的线程来处理被添加的任务。

如果此时线程池中的数量等于 corePoolSize,但是缓冲队列 workQueue未满,那么任务被放入缓冲队列。

如果此时线程池中的数量大于corePoolSize,缓冲队列workQueue满,并且线程池中的数量小于maxPoolSize,建新的线程来处理被添加的任务。

如果此时线程池中的数量大于corePoolSize,缓冲队列workQueue满,并且线程池中的数量等于maxPoolSize,那么通过handler所指定的策略来处理此任务。也就是:处理任务的优先级为:核心线程corePoolSize、任务队列workQueue、最大线程 maximumPoolSize,如果三者都满了,使用handler处理被拒绝的任务。

当线程池中的线程数量大于corePoolSize时,如果某线程空闲时间超过keepAliveTime,线程将被终止。这样,线程池可以动态的调整池中的线程数。

核心线程数设置参考:

CPU密集型:核心线程数 = CPU核数 + 1

IO密集型:核心线程数 = CPU核数 2

什么是CPU密集型?什么是IO密集型?

>

//检查线程池的方法 private voidCheckThreadPool(object state, bool timeout){int workerThreads = 0;

int maxWordThreads = 0;

//int int compleThreads = 0;

ThreadPoolGetAvailableThreads(out workerThreads, out compleThreads);

ThreadPoolGetMaxThreads(out maxWordThreads, out compleThreads);

//当可用的线数与池程池最大的线程相等时表示线程池中所有的线程已经完成 if (workerThreads == maxWordThreads){//当执行此方法后CheckThreadPool将不再执行 rhwUnregister(null);//此处加入所有线程完成后的处理代码}}

以上就是关于合理使用线程池以及线程变量全部的内容,包括:合理使用线程池以及线程变量、你如何在Java中获取线程堆栈、spring中的线程池等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9598362.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存