「java线程池超时」java线程池超时设置
本篇文章给大家谈谈java线程池超时,以及java线程池超时设置对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
java线程池里的线程,怎么设置Timeout
应该是没有这个功能的,因为线程池里面的线程实际上是复用的,即执行完一个Job以后会从Quenue(任务队列)里面取新的JOB。
如果有这样的需求可以:
1)控制JOB的执行时间不能太长,否则可能会造成阻塞;
2)在JOB的实现(run方法)里面做相应的控制;
3)如果JOB有长时间和短时间两种模式,可以考虑放在两个线程池中,避免长时间的任务阻塞短时间的任务;
4)也可以控制等待队列的任务个数,但是Executors默认的Factory方法是没有这个参数的,需要直接new ThreadPoolExecutor
Java中如何实现线程的超时中断
如果你是要在子线程超时后直接关闭的话可以这样:
exec=Executors.newFixedThreadPool(1);
CallableString call = new CallableString() {
public String call() throws Exception {
//开始操作
//TimeTaskTest.star(null);
return "线程执行完成";
}
};
FutureString future = exec.submit(call);
//设置为30分钟超时
future.get(1000*60*time , TimeUnit.MILLISECONDS);
=========================================
如果你是在进行其他操作的话那就比较麻烦了,目前我想到的是在子线程中一直访问某个变量,超时时守护线程改变这个值,然后子线程读到后退出,不过这个有个问题,就是当子线程卡死在某个环节时完全无用
线程池的超时参数
在ThreadPoolExecutor方法的参数注释中keepAliveTime是这样说的:
就是线程数大于corePoolSize时空闲线程存活的最大时间。在方法getTask中就可明白具体是怎么实现的。
注意到工作线程数wc大于corePoolSize或allowCoreThreadTimeOut为true时timed为true。
poll方法超时后timeOut变为true。
在下一次循环中下面判断条件为真,执行了compareAndDecrementWorkerCount方法,当前线程跳出循环。
getTask返会null后,执行了processWorkerExit方法,当前Worker被移除。
java线程池超时的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java线程池超时设置、java线程池超时的信息别忘了在本站进行查找喔。
发布于:2022-11-23,除非注明,否则均为
原创文章,转载请注明出处。