问题描述
最近在使用ExecutorService线程池提交任务,发现任务一直不执行,设置了超时时间,也会抛出超时异常。使用jstack查看线程是否死锁,并没有发现死锁存在。线程池定义代码如下:
private final ExecutorService executorService = Executors.newFixedThreadPool(3, new ThreadFactory() {
@Override
public Thread newThread(Runnable r) {
return new Thread("xxx-thread");
}
});
问题解决
其实问题很简单,创建线程没有指定Runnable,导致线程一直没有可执行的任务,创建线程改成new Threah(r,"xxx-thread")就可以了。这是因为线程池中线程没有指定Runnable对象,导致一直没有任务执行。
网友评论