スレッドプールのアイデアの概要
とき、我々は簡単に実装することが、スレッドを作成するためにスレッドを使用する際に行ってきましたが、問題があるでしょう:スレッドの場合、多くの同時数、および各スレッドは、それほど頻繁に作成し、作業が終わって、非常に短い時間で実行されます頻繁にスレッドの作成とスレッドの破壊の時間を要するため、スレッドが大幅に、システムの効率が低下します。
スレッドプールの概念
スレッドプール:繰り返しがスレッドを作成し、あまりにも多くのリソースを消費することなく、実際には、スレッドが頻繁に必要性を排除し、繰り返し使用することができ、収納容器、複数のスレッドは、スレッドオブジェクトの操作を作成します。
/
3つの利益をもたらすことができる、スレッドプールの使用の合理化:
1.リソースの消費を削減します。各ワーカースレッドを再利用することができ、スレッドの作成と破棄の数を減らすには、複数のタスクを実行することができます。
2.応答速度を向上させることができます。ミッションが到着すると、タスクは、スレッドの作成を直ちに実施することが可能になるまで待つ必要がないかもしれません。
3.管理スレッドを改善するため。サーバが自分自身を燃やしながら、システムの容量、なぜならメモリの過剰消費を防止するために、調整線スレッドプールスレッドの数に応じて(各スレッドは、メモリの1メガバイト程度かかり、より多くのスレッドを開き、また、メモリを消費します大きな前回クラッシュ)。
スレッドプールを使用します
トップレベルインターフェース内のJavaスレッドプールはjava.util.concurrent.Executorであるが、執行スレッドプールは、厳密な意味ではなく、実行ツールの唯一のスレッド。実際のスレッドプールインタフェースはjava.util.concurrent.ExecutorServiceです
次のように執行クラスは、スレッドプールを作成しました:
パブリック静的ExecutorServiceのnewFixedThreadPoolは(int型にnthreads) :スレッドプールオブジェクトを返します。(スレッドの数が最大数を指定することができ、プールにあるスレッドプール、制限され作成された)
スレッドプールExecutorServiceのオブジェクトを取得し、
次のようにスレッド・プール・オブジェクトを使用します。
公共の未来(Runnableをタスク)を提出する<?>:1つのスレッドプールのスレッドオブジェクトを取得し、実行します。将来のインタフェース:タスクが完了した後、スレッドの結果を記録するために使用されます。スレッドプールの作成と使用。
使用段階のスレッドプールのスレッドオブジェクト:
スレッドプールのオブジェクトを作成します。1.。
2.、Runnableインタフェースサブクラスのオブジェクトを作成します。(タスク)は
、Runnableインタフェースサブクラスのオブジェクトを提出してください。3.。(テイクタスク)
4.閉じるスレッドプール(通常はありません)。
1つ のためのパッケージ変更demosummary.threadpool; 2 3 パブリック クラス MyRunnable 実装Runnableを{ 4 @Override 5 公共 無効RUN(){ 6 のSystem.out.println( "こんにちは、私は特定の先生は私のJavaを教え見つけたい" ); 7 試み{ 8。 のThread.sleep(5000); // 5秒待って、他の教師が来た 9。 } キャッチ(InterruptedExceptionあるE){ 10 e.printStackTrace(); 11 } 12はある のSystem.out.println(+ "先生は〜来ます"Thread.currentThread()のgetName());. 13 のSystem.out.println( "今日、私はその後、私は戻って練習に行かせ、いくつかの基本的なJavaの教え" ); 14 } 15 }
1 パッケージdemosummary.threadpool; 2 。3 インポートjava.util.concurrent.ExecutorService; 4 インポートjava.util.concurrent.Executors; 5 。6つの パブリック クラスThreadPoolTest { 7 パブリック 静的 ボイドメイン(文字列[]引数){ 8 // 作成スレッドプールオブジェクト 9。 ExecutorServiceのExecutors.newFixedThreadPool-SERVICE =(5。); 10 // のRunnableのオブジェクトのインスタンスを作成する 11。 氏のMyRunnable = 新しい新しいMyRunnable(); 12は 13である / ** 14 *あなた自身のスレッドオブジェクトモード作成 15 *スレッドt =新しい新しいスレッド(R); 16 * t.start(); ---> RUN()のコールMyRunnable 17 * / 18 // スレッドプールのスレッドからオブジェクトを取得[実行方法は、内MyRunnableを呼び出し 19 service.submit(MR); 20 // スレッドプールのスレッドオブジェクトから再度取得し、その実行メソッド呼び出し 21 service.submit(MR)を、 22 service.submit(MR); 23 // 注:提出メソッドの呼び出しが終了した後、プログラムを終了されていませんが、スレッドプールが閉じたスレッドを制御しているため、スレッドは、スレッドプール(共有同様の電荷の宝物)に返されます。 24 // スレッドが使い果たさ、スレッドプールに返さ 25 // ; service.shutdown()// (通常閉じ推奨されない)近くスレッドプール 26 } 27 }