Javaマルチスレッド08_スレッドプール
Javaマルチスレッド08_スレッドプール
スレッドプールの概念:
スレッドプールは、スレッドプールと呼ばれるスレッドを最初に作成します.スレッドプールを使用すると、パフォーマンスが向上します.スレッドプールはシステムの起動時に大量の空きスレッドを作成します.プログラムはタスクをスレッドプールに渡します.スレッドプールはスレッドを起動してこのタスクを実行します.実行が終了した後、スレッドは死亡しません.スレッドプールに戻って空き状態になり、次のタスクの実行を待っています.
スレッドプールを使用する理由:
マルチスレッドの実行時間、システムが絶えず新しいスレッドを起動し、閉じ、コストが非常に高く、システムリソースを過度に消費し、スレッドを過度に切り替える危険があり、システムリソースのクラッシュを引き起こす可能性があります.この場合、スレッドプールが最善の選択です.
ExecutorServiceは、Javaが提供するスレッドプールを管理するクラスです.このクラスの2つの役割:スレッドの数の制御と再利用スレッド
スレッドプールの概念:
スレッドプールは、スレッドプールと呼ばれるスレッドを最初に作成します.スレッドプールを使用すると、パフォーマンスが向上します.スレッドプールはシステムの起動時に大量の空きスレッドを作成します.プログラムはタスクをスレッドプールに渡します.スレッドプールはスレッドを起動してこのタスクを実行します.実行が終了した後、スレッドは死亡しません.スレッドプールに戻って空き状態になり、次のタスクの実行を待っています.
スレッドプールを使用する理由:
マルチスレッドの実行時間、システムが絶えず新しいスレッドを起動し、閉じ、コストが非常に高く、システムリソースを過度に消費し、スレッドを過度に切り替える危険があり、システムリソースのクラッシュを引き起こす可能性があります.この場合、スレッドプールが最善の選択です.
ExecutorServiceは、Javaが提供するスレッドプールを管理するクラスです.このクラスの2つの役割:スレッドの数の制御と再利用スレッド
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class TestPool {
public static void main(String[] args) {
// , ,newFixedThreadPool
ExecutorService service = Executors.newFixedThreadPool(10);
//
service.execute(new MyThread());
service.execute(new MyThread());
service.execute(new MyThread());
service.execute(new MyThread());
//
service.shutdown();
}
}
class MyThread implements Runnable{
@Override
public void run() {
System.out.println(Thread.currentThread().getName());
}
}
pool-1-thread-1
pool-1-thread-4
pool-1-thread-3
pool-1-thread-2