RejectedExecutionException。游泳池大小太小?

时间:2013-10-29 20:01:32

标签: java multithreading

我正在尝试在java中创建几个计划任务。

但是,当我添加几个任务时,其中一些任务会崩溃,返回此异常:

  

线程“main”中的异常java.util.concurrent.RejectedExecutionException:java.util.concurrent.ScheduledThreadPoolExecutor@74010c69中的任务java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask@219baf0b被拒绝[关闭,池大小= 2,活动线程= 0,排队任务= 4,完成任务= 0]

这是我正在使用的代码:

final ScheduledExecutorService schExService;

/**
 * Constructor per defecte de TaskSchedulker. Aquí s'inicaran els atributs i 
 * s'instanciaran els objectes necessaris per disposar d'un programador com 
 * el descrit totalement funcional.
 */
public TaskScheduler() {
    schExService = Executors.newScheduledThreadPool( 2 );
}
public void addTask(){
    final Runnable ob = new ExecutaFil(tskParams);
    schExService.schedule(ob, toSeconds( timeToWait ), TimeUnit.SECONDS);
}

我多次触发addTask方法。

ExecutaFil只是一个实现Runnable的类,其中包含sleep

任何提示?

我尝试更改池值(从2改为例如100)并忽略它。池大小永远不会高于4.我猜它与处理器直接相关?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

  

拒绝来自java.util.concurrent.ScheduledThreadPoolExecutor@74010c69 [关闭,池大小= 2,活动线程= 0,排队任务= 4,已完成任务= 0]

这意味着你通过调用shutdown()来关闭执行程序。如果要继续添加任务,请不要将其关闭。

  

我猜这与处理器直接相关?

错误消息中没有任何内容表明这一点。