1つの場所でのみ使用する場合は、java.util.concurrent.ThreadFactory
実装をインライン化できます。たとえば、4つのスレッドを含むプールの場合(Java 1.8以降を想定したラムダとして示されている例):
ExecutorService pool = Executors.newFixedThreadPool(4,
(Runnable r) -> {
Thread t = new Thread(r);
t.setDaemon(true);
return t;
}
);
しかし、私は通常、すべてのスレッドファクトリでデーモンスレッドを生成する必要があるため、次のようにユーティリティクラスを追加します。
import java.util.concurrent.ThreadFactory;
public class DaemonThreadFactory implements ThreadFactory {
public final static ThreadFactory instance =
new DaemonThreadFactory();
@Override
public Thread newThread(Runnable r) {
Thread t = new Thread(r);
t.setDaemon(true);
return t;
}
}
それは私が簡単にに渡すことを可能にしますDaemonThreadFactory.instance
、ExecutorService
例えば
ExecutorService pool = Executors.newFixedThreadPool(
4, DaemonThreadFactory.instance
);
または、これを使用して、からデーモンスレッドを簡単に開始します。Runnable
DaemonThreadFactory.instance.newThread(
() -> { doSomething(); }
).start();