メソッド: newCachedThreadPool はキャッシュ可能なスレッド プールを作成し、newFixedThreadPool は固定長のスレッド プールを作成し、newScheduledThreadPool は固定長のスレッド プールを作成し、newSingleThreadExecutor はシングルスレッド スレッド プールを作成します。
#スレッド プールを作成する 4 つの方法
Java はエグゼキューター プールを通じて 4 つのスレッドを提供します、それぞれ:1. newCachedThreadPool
newCachedThreadPool を使用して、キャッシュ可能なスレッド プールを作成します。スレッド プールの長さが処理の必要性を超えた場合、アイドル状態のスレッドを柔軟にリサイクルできます。 . リサイクルがない場合は、新しいスレッドを作成してください。 このタイプのスレッド プールの特徴は次のとおりです。package test; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class ThreadPoolExecutorTest { public static void main(String[] args) { ExecutorService cachedThreadPool = Executors.newCachedThreadPool(); for (int i = 0; i < 10; i++) { final int index = i; try { Thread.sleep(index * 1000); } catch (InterruptedException e) { e.printStackTrace(); } cachedThreadPool.execute(new Runnable() { public void run() { System.out.println(index); } }); } } }
2. newFixedThreadPool
を使用して、指定されたスレッド プールを作成します。ワーカースレッドの数。タスクがサブミットされるたびにワーカースレッドが作成され、ワーカースレッドの数がスレッドプールの初期最大数に達すると、サブミットされたタスクはプールキューに格納されます。 FixedThreadPool は典型的な優れたスレッド プールであり、スレッド プールによってプログラムの効率が向上し、スレッド作成時のオーバーヘッドが節約されるという利点があります。ただし、スレッド プールがアイドル状態のとき、つまりスレッド プールに実行可能なタスクがないときは、ワーカー スレッドは解放されず、特定のシステム リソースも占有します。 サンプル コードは次のとおりです。package test; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class ThreadPoolExecutorTest { public static void main(String[] args) { ExecutorService cachedThreadPool = Executors.newCachedThreadPool(); for (int i = 0; i < 10; i++) { final int index = i; try { Thread.sleep(index * 1000); } catch (InterruptedException e) { e.printStackTrace(); } cachedThreadPool.execute(new Runnable() { public void run() { System.out.println(index); } }); } } }スレッド プール サイズが 3 であるため、各タスクはインデックスの出力後に 2 秒間スリープし、2 秒ごとに 3 つの数値が出力されます。 固定長スレッド プールのサイズは、Runtime.getRuntime().availableProcessors() などのシステム リソースに応じて設定するのが最適です。
3. newSingleThreadExecutor
を使用してシングルスレッド Executor を作成します。つまり、タスクを実行するための一意のワーカー スレッドのみを作成します。これは唯一のワーカーのみを使用します。タスクを実行するには、すべてのタスクが指定された順序 (FIFO、LIFO、優先順位) で実行されるようにしてください。このスレッドが異常終了した場合は、順次実行を保証するために別のスレッドに置き換えられます。単一ワーカー スレッドの最大の特徴は、タスクが順番に実行され、同時に複数のスレッドがアクティブになることがないことを保証できることです。 サンプル コードは次のとおりです:package test; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class ThreadPoolExecutorTest { public static void main(String[] args) { ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor(); for (int i = 0; i < 10; i++) { final int index = i; singleThreadExecutor.execute(new Runnable() { public void run() { try { System.out.println(index); Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } } }); } } }
4. newScheduledThreadPool
を使用して、固定長のスレッド プールを作成し、スケジュールされた定期的なタスクをサポートします。実行。スケジュールされた定期的なタスクの実行をサポートします。 実行を 3 秒遅延します。遅延実行のサンプル コードは次のとおりです。package test; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; public class ThreadPoolExecutorTest { public static void main(String[] args) { ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5); scheduledThreadPool.schedule(new Runnable() { public void run() { System.out.println("delay 3 seconds"); } }, 3, TimeUnit.SECONDS); } }は、1 秒の遅延後に 3 秒ごとに実行されることを意味します。定期実行のサンプル コード
package test; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; public class ThreadPoolExecutorTest { public static void main(String[] args) { ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5); scheduledThreadPool.scheduleAtFixedRate(new Runnable() { public void run() { System.out.println("delay 1 seconds, and excute every 3 seconds"); } }, 1, 3, TimeUnit.SECONDS); } }続き プログラミング関連の知識については、
プログラミング学習 Web サイト をご覧ください。 !
以上がスレッド プールを作成する 4 つの方法とは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。