1. ホーム
  2. java

[解決済み] 現在のスレッドを使用するExecutorServiceはありますか?

2022-10-27 23:44:31

質問

私が求めているのは、スレッドプールを使用するかどうかを設定するための互換性のある方法です。理想的には、コードの残りの部分はまったく影響を受けないようにする必要があります。私は1つのスレッドでスレッドプールを使用することができましたが、それは私が望むものでは全くありません。何かアイデアはありますか?

ExecutorService es = threads == 0 ? new CurrentThreadExecutor() : Executors.newThreadPoolExecutor(threads);

// es.execute / es.submit / new ExecutorCompletionService(es) etc

どのように解決するのですか?

ここでは、本当に簡単な Executor (ただし ExecutorService でなく)、現在のスレッドのみを使用する実装です。 これは "Java Concurrency in Practice" (必読書)から盗んできたものです。

public class CurrentThreadExecutor implements Executor {
    public void execute(Runnable r) {
        r.run();
    }
}

ExecutorService はより精巧なインタフェースですが、同じアプローチで処理することができます。