2

Executors.newFixedThreadPool()デーモンスレッドを使用したいJavaスレッドプールを作成しました。

その理由は、これは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;
    }

}

何らかの理由で、キューに入れられたタスクが実行されない状態で使用するDaemonThreadFactoryと。Executors.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 に答える