在Java线程池中使用守护程序线程不起作用

时间:2012-10-02 14:02:00

标签: java multithreading threadpool

我有一个通过Executors.newFixedThreadPool()创建的Java线程池,我想使用守护程序线程。

原因是这是一个GUI应用程序,我不希望这些线程导致程序在Window关闭后继续运行。

我实现了一个自定义ThreadFactory,在其创建的主题上设置Thread.setDaemon(true)

课程是这样的:

import java.util.concurrent.ThreadFactory;

public class DaemonThreadFactory implements ThreadFactory{

    public Thread newThread(Runnable runnable){
        Thread thread = new Thread();
        thread.setDaemon(true);
        return thread;
    }

}

由于某种原因,当DaemonThreadFactoryExecutors.newFixedThreadPool()一起使用时,我的所有排队任务都不会被执行。如果我将其更改回常规ThreadFactory,则可以正常工作。

我做错了什么?

2 个答案:

答案 0 :(得分:5)

你没有将Runnable传递给线程,所以没有代码可以执行:

@Override
public Thread newThread(Runnable runnable)
{
    Thread thread = new Thread(runnable);
    thread.setDaemon(true);
    return thread;
}

答案 1 :(得分:3)

您忽略了传递给您的Runnable,Thread必须将其包裹起来。

public Thread newThread(Runnable runnable) {
    Thread thread = new Thread(runnable);

否则你创建的线程实际上什么都不做。