マルチスレッドのスレッドプール内の第四のJavaベース

1スレッドプールとは何ですか。

    スレッドプールは、システムの起動中にアイドル状態のスレッドの数が多いを作成することで、プログラムはなりRunnableオブジェクトまたはCallableオブジェクトスレッドプールに渡され、スレッドプールは、いつ実行すると、その実行()または()メソッドの呼び出しを実行するスレッドを開始します実行()または()メソッドの呼び出し後、スレッドは死なないが、実行次回実行Runableオブジェクト()または()メソッドの呼び出しを待っている、アイドル状態と呼ばれるスレッドプールに再び戻りました。

    Java 5のは、以前に手動スレッド・プール、Java 5の内蔵されたスレッドプールのために必要な、スレッドプールを作成するための新しいExcutorsファクトリクラスは、ファクトリクラスは、スレッドプールを作成するには、次のstaticファクトリメソッドが含まれています。

  方法上記図7に示すように、最初の三つのリターンスレッドRunnableオブジェクトまたは表現呼び出し可能なオブジェクトを実行することができるスレッドのプールを表すExecutorServiceのオブジェクト、中間体2つの戻りScheduledExecutorServiceスレッドプール、ExecutorServiceのサブクラスでありますそれは指定された遅延スレッドのタスクの後に実行することができ、最後の二つは、Java 8新しい方法、マルチCPUの並列を最大限に活用する能力です。プールを盗む仕事を生成これらの2つの方法は、すべてのフォアグラウンドスレッドが死亡している場合は、スレッドプールは自動的に死を盗んで動作しますが、バックグラウンドスレッドプールの等価です。

    すぐに(限り自由スレッドプールのスレッド、すぐにタスクの実行スレッドがあるので)スレッドプールスレッドの実装できるだけExecutorServiceの代表は、3つのメソッドを提供しています:

   

   ScheduledExecutorServiceを代表して遅らせたり、定期的に指定されたタスクの実行スレッドプールのスレッドの間に、4つのメソッドを提供可能性があります。

   

   シーケンスを開始するには、スレッドプールを閉じますシャットダウン()メソッドを呼び出す必要があるスレッドプールのスレッドプールを使用した後。このメソッドは、スレッドプールを呼び出した後、もはや新しいタスクを受信しませんが、すべての前のタスクの実行が完了し提出する必要があります。提出されたすべてのタスクが実行された後、スレッドプールのスレッドは、すべてが死んでしまいます。実行中のアクティブなタスクすべてを停止しようと、スレッドプールを閉鎖するために、呼び出し元のスレッドプールshutdownNowの()メソッドは、処理タスクが待っている停止し、実行を待っているタスクのリストを返します。

   次のようにしているスレッドプールを使用するには:

    1「スレッドプールを表すExecutorServiceのエグゼキュータ・クラス・オブジェクトを作成するために、静的ファクトリメソッドを呼び出します。

    2「クラスのRunnableをまたは呼び出し可能なインスタンス、実行スレッドとしてタスクを実装するクラスを作成します。

    3「Runnableオブジェクトまたは呼び出し可能オブジェクトを提出するExecutorServiceのオブジェクト提出()メソッドを呼び出します。

    あなたが任意のタスクを送信したくない場合は4」、スレッドプールを閉鎖するために、シャットダウンExecutorServiceのオブジェクト()メソッドを呼び出します。

    例えば:

パブリック クラス ImplCallable 実装は、呼び出し可能<整数> { 

   ... 
   @Override 
   公共整数コール(){ 
 
      ... 
      // 何か
      するSystem.out.println(にThread.currentThread()のgetName());
       // 戻り値A. 
      リターン 1。; 
   } 

    パブリック 静的 ボイドメイン(AGRSとして文字列[])がスローInterruptedExceptionある、ExecutionExceptionを{ 

      ... 
//スレッドの固定数を持つスレッドプールを作成し(6)
ExecutorServiceの= Executors.newFixedThreadPoolプール(6);
// 作成しスレッド開始 = FutureTask <整数>ターゲットを新しい新しい FutureTask、<整数>(新しい新しいImplCallable()); // 2つのスレッド・プール・スレッドに提出は、
(ターゲット)pool.submit;
pool.submit(ターゲット);
//閉じるスレッドプール
pool.shutdown(); } }

2、Javaの8強化ForkJoinPool

 

おすすめ

転載: www.cnblogs.com/ZeroMZ/p/11409913.html