バックグラウンド:
頻繁に作成および破棄され、同時条件のスレッドなど、大量のリソースを使用するリソースは、パフォーマンスに大きな影響を与えます。
アイデア:
事前に複数のスレッドを作成してスレッドプールに入れ、使用時に直接取得し、使用後はプールに戻します。頻繁な作成と破棄を回避し、再利用を実現できます。生活における公共交通機関と同じです。
利点:
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();
}
}
見てくれてありがとう!!!