[Java マルチスレッド] マルチスレッドを作成する 4 番目の方法: スレッド プールを使用する

バックグラウンド:

頻繁に作成および破棄され、同時条件のスレッドなど、大量のリソースを使用するリソースは、パフォーマンスに大きな影響を与えます。

アイデア:

事前に複数のスレッドを作成してスレッドプールに入れ、使用時に直接取得し、使用後はプールに戻します。頻繁な作成と破棄を回避し、再利用を実現できます。生活における公共交通機関と同じです。

利点:

1. 応答速度の向上(新しいスレッドの作成時間の短縮)

2. リソース消費を削減します (スレッド プール内のスレッドを再利用し、毎回作成する必要はありません)

3. 簡単なスレッド管理

       corePoolSize: コア プールのサイズ

       MaximumPoolSize: スレッドの最大数

       keepAliveTime: スレッドにタスクがない場合、スレッドは最長でどれくらいの時間保持された後に終了します。

       …

スレッドプール関連のAPI

JDK 5.0 は、スレッド プール関連のAPIを提供します: ExecutorServiceおよびExecutor

ExecutorService : 実際のスレッド プール インターフェイス。共通サブクラス ThreadPoolExecutor

                               voidexecute(Runnable command): タスク/コマンドを実行します。戻り値はありません。通常、Runnable を実行するために使用されます。

                               Future submit(呼び出し可能なタスク): タスクを実行し、戻り値を持ち、通常は呼び出し可能なタスクを実行します。

                               void shutdown() : 接続プールを閉じる

エグゼキュータ:ツール クラス、スレッド プールのファクトリ クラス。さまざまなタイプのスレッド プールを作成して返すために使用されます。

                    Executors.newCachedThreadPool(): 必要に応じて新しいスレッドを作成できるスレッド プールを作成します。

                    Executors.newFixedThreadPool(n); 再利用可能な固定数のスレッドを持つスレッド プールを作成します

                    Executors.newSingleThreadExecutor() : スレッドが 1 つだけあるスレッド プールを作成します

                    Executors.newScheduledThreadPool(n): 指定された遅延の後、または定期的にコマンドを実行するようにスケジュールできるスレッド プールを作成します。

================================================= =======================

ステップ:

1. 指定された数のスレッドを備えたスレッド プールを提供します
2. 指定されたスレッドの操作を実行します。Runnableインターフェース Callableインターフェース実装クラスを実装したオブジェクトを提供する必要があります。
3. コネクションプールをクローズする

================================================= =======================

「1~100までの偶数をたどる」を例に挙げます。

コードは以下のように表示されます。

class NumberThread implements Runnable{

    @Override
    public void run() {
        for (int i = 0; i <= 100; i++) {
            if (i % 2 == 0){
                System.out.println(Thread.currentThread().getName() + ":" + i);
            }
        }
    }
}

public class ThreadPool {
    public static void main(String[] args) {
        //1.提供指定线程数量的线程池
        ExecutorService service = Executors.newFixedThreadPool(10);

        //2.执行指定的线程的操作。需要提供实现Runnable接口Callable接口实现类的对象
        service.execute(new NumberThread());//适合适用于Runnable

        //service.submit(Callable callable);//适合适用于Callable

        //3.关闭连接池
        service.shutdown();
    }
}

見てくれてありがとう!

おすすめ

転載: blog.csdn.net/qq_64976935/article/details/128910216
おすすめ