2

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

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

我实现了一个自定义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,它就可以工作。

我究竟做错了什么?

4

2 回答 2

5

您没有将 传递Runnable给线程,因此没有要执行的代码:

@Override
public Thread newThread(Runnable runnable)
{
    Thread thread = new Thread(runnable);
    thread.setDaemon(true);
    return thread;
}
于 2012-10-02T14:03:44.047 回答
3

您忽略了传递给您的线程必须包装的 Runnable。

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

否则,您正在创建实际上什么都不做的线程。

于 2012-10-02T14:04:38.213 回答