インタビューの質問の共有
クラウドデータでトランザクションのロールバック問題を解決
クリックすると直接移動します
2023年最新インタビュー集リンク
2023年主要工場面接質問PDF
面接の質問PDF版
Java、Pythonの面接の質問
プロジェクトの実践: AI テキスト OCR 認識のベスト プラクティス
AI Gamma は、ワンクリックで PPT ツールへの直接リンクを生成します
Play Cloud Studio オンライン コーディング アーティファクト
GPUで遊ぶ AI絵画、AI音声、翻訳、GPUがAIの想像空間を照らす
史上最も完全なドキュメント AI絵画安定拡散データ共有
SD、MJ、GPT、SDXLに関するAIペイント事典
AI絵画安定普及 Midjourney公式GPT文書 AIGC百科事典データ集
AIGC情報パッケージ
1 はじめに
マルチスレッド プログラミングでは、スレッドの作成と管理は重要かつ面倒な作業です。このプロセスを簡素化するために、Java はスレッド プール (Thread Pool) メカニズムを提供します。スレッド プールは、事前に一定数のスレッドを作成し、実行する必要のあるタスクをこれらのスレッドに割り当てることで、プログラムのパフォーマンスとリソース使用率を向上させるためにスレッドを管理するために使用されるテクノロジです。
この記事では、スレッド プールの作成、使用、破棄など、Java でのスレッド プールの使用方法を紹介します。
2. スレッドプールを作成する
Java には、java.util.concurrent.Executors
スレッド プールを作成するためのクラスが用意されています。スレッド プールを作成する一般的に使用される方法は次のとおりです。
newFixedThreadPool(int nThreads)
: 固定サイズのスレッド プールを作成します。パラメータはnThreads
スレッド プール内のスレッドの数を示します。newCachedThreadPool()
: キャッシュ スレッド プールを作成すると、スレッドの数が必要に応じて自動的に調整されます。newSingleThreadExecutor()
: 単一スレッドのスレッド プールを作成して、すべてのタスクが指定された順序 (FIFO、LIFO、優先順位) で実行されるようにします。newScheduledThreadPool(int corePoolSize)
: スケジュールされたタスクと定期的なタスクを実行できるスケジューリング機能を備えたスレッド プールを作成します。
newFixedThreadPool()
以下を使用してスレッド プールを作成する例を次に示します。
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ThreadPoolExample {
public static void main(String[] args) {
// 创建固定大小为5的线程池
ExecutorService executor = Executors.newFixedThreadPool(5);
// 执行任务
for (int i = 0; i < 10; i++) {
final int taskId = i;
executor.execute(new Runnable() {
@Override
public void run() {
System.out.println("Task " + taskId + " executed by " + Thread.currentThread().getName());
}
});
}
// 关闭线程池
executor.shutdown();
}
}
3. スレッドプールを使用する
スレッド プールを作成した後、実行のためにタスクをスレッド プールに送信できます。タスクを送信する一般的に使用される方法は次のとおりです。
execute(Runnable task)
: 実行可能タスクを実行のためにスレッド プールに送信します。submit(Callable<T> task)
: Callable タスクを実行のためにスレッド プールに送信し、タスクの結果を表す Future オブジェクトを返します。
次に、スレッド プールを使用してタスクを実行する例を示します。
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ThreadPoolExample {
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(5);
// 提交任务
executor.execute(new Runnable() {
@Override
public void run() {
System.out.println("Task executed by " + Thread.currentThread().getName());
}
});
// 关闭线程池
executor.shutdown();
}
}
4. スレッドプールを破棄します。
スレッド プールが不要になった場合は、スレッド プールを明示的に破棄してリソースを解放する必要があります。shutdown()
またはshutdownNow()
メソッドを使用して、スレッド プールを破棄できます。
shutdown()
: スレッド プールを静かにシャットダウンし、すべてのタスクが完了するまで待ちます。shutdownNow()
処置: スレッドプールを直ちに閉じて、実行中のタスクを終了してみます。
スレッド プールを破棄する例を次に示します。
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ThreadPoolExample {
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(5);
// 执行任务
// 销毁线程池
executor.shutdown();
// 或者立即销毁线程池
// executor.shutdownNow();
}
}
5. スレッドプールの利点
スレッド プールを使用する主な利点は次のとおりです。
- リソース消費の削減: スレッドの作成と破棄はリソースを大量に消費する操作です。スレッド プールにより、スレッドの頻繁な作成と破棄が回避され、リソースの消費が削減されます。
- 応答速度の向上: スレッド プール内のスレッドが作成されており、タスクが到着するとすぐに実行できるため、システムの応答速度が向上します。
- スレッド管理の向上: スレッド プールは、スレッドの作成、破棄、監視、その他の操作を含むスレッドの統合管理を実行できるため、スレッド管理がより便利かつ柔軟になります。
- 同時スレッド数の制御: スレッド プールは、スレッドが多すぎることによるシステム リソースの不足または過負荷を避けるために、システムの負荷に応じて同時スレッドの数を制限できます。
6. まとめ
この記事では、Java スレッド プールの使用手順を紹介します。スレッド プールを使用すると、マルチスレッド タスクを効果的に管理および実行でき、システムのパフォーマンスとリソースの使用率が向上します。スレッド プールを使用するときは、スレッド プールのサイズを合理的に構成し、リソースを解放するのに間に合うようにスレッド プールを破棄することに注意する必要があります。
この記事が Java スレッド プールの理解と使用に役立つことを願っています。読んでくれてありがとう!