「java线程池超时」java线程池超时设置

博主:adminadmin 2022-11-23 08:20:05 45

本篇文章给大家谈谈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线程池超时的信息别忘了在本站进行查找喔。

The End

发布于:2022-11-23,除非注明,否则均为首码项目网原创文章,转载请注明出处。