Javaのマルチスレッド、スレッドプール、

3のスレッドプールを作成する方法であって:

    // 空きスレッドがある場合は、各タスクについて、すぐに彼の任務、聞かせて使用可能です
     // アイドルスレッドがスレッドを作成しません。
    プール= ExecutorServiceのExecutors.newCachedThreadPool();
     // 固定サイズのスレッドプール、タスクの数>アイドル状態のスレッド、タスクキュー未配信で 
    ExecutorServiceのプール= Executors.newFixedThreadPool;
     // スレッドプール1の大きさの低下、タスクごとのスレッドの実行が提出しました。
    ExecutorServiceのプール= Executors.newSingleThreadPool()。

2.スレッドプールにタスクを割り当てます。

    // 返されるオブジェクトはisCancelled、)(キャンセル)(isDoneを呼び出すことができます 
    <?>今後の提出(Runnableをタスク);
     // GET()指定された結果オブジェクトを返し 
    今後は<T> (Runnableをタスク、T結果)を提出;
     / / 結果に返されるオブジェクトは、それを取得する準備が整いました。
    フューチャー<T>提出(呼び出し可能< T>タスク)。

スレッドプール、コール・シャットダウンが()スレッドプールのシャットダウンシーケンスを開始する際に3切れ。タスクが完了すると、アクチュエータは、もはや新しいタスクを受け入れないスレッドプールのスレッド死をオフにしています。

4.ケース:ディレクトリを考えると、このドキュメントでは、中国の数を見つけるためのディレクトリが指定されたキーワードを含む文書です。

  条件:ディレクトリ、キーワード

  4.1 Taskクラス(Threadクラス)

   / ** スレッドタスク:特定のキーワードディレクトリの計算を含むすべてのファイルの数。* / 
   クラス MatchCounter 実装呼び出し可能<整数> 
   { 
      プライベートファイルディレクトリ;
       プライベート文字列のキーワード;
       プライベートExecutorServiceのプール、
       プライベート int型のCOUNT; 

      / ** 
       。* MatchCounterを構築します
       * @Param ディレクトリ指定したディレクトリ
       * @paramのキーワードキーワード
       * @ PARAM のタスクを実行するために使用されるプールのスレッドプール
        * / 
      公共MatchCounter(ファイルディレクトリ、文字列のキーワード、ExecutorServiceのプール)
      { 
         これを= .directory ディレクトリ;
          この .keyword = キーワード;
          この .pool = プール; 
      } 

      @Override 
      公共整数コール()
      { 
         COUNT = 0 ;
          試み
         { 
            ファイル[]ファイル =のdirectory.listFiles();
             // スレッドの実行結果セット 
            リスト<今後の<整数>>結果= 新しい新しいのArrayList <> (); 

            のために(ファイルのファイル:ファイル)
                // 指定したディレクトリ内のすべてのファイルを反復
                // フォルダの場合
               であれば(file.isDirectory())
               { 
                  // 再帰 
                  MatchCounterカウンタ= 新新MatchCounter(ファイル、キーワード、プール); 
                  今後の <整数> =結果pool.submit(カウンタ); 
                  results.add(結果); 
               } 
               // もしファイル、キーワードが含まれているかどうかを確認するために、検索()メソッドを呼び出します。
               他の
               { 
                  IF(検索(ファイル))COUNT ++ ; 
               } 

            のための(未来の<整数> 結果:結果)
                試し
               { 
                  int型 A = result.get(); 
                  COUNT + =result.get(); 
               } 
               キャッチ(ExecutionException電子)
               { 
                  e.printStackTrace(); 
               } 
         } 
         キャッチ(InterruptedExceptionあるE)
         { 
         } 
         戻り数えます。
      } 

      / ** 
       *指定したキーワードのファイルを検索します。
       * @paramは、検索するファイルをファイル
       * @return キーワードがファイルに含まれている場合はtrue
        * / 
      パブリック ブール検索(ファイルのファイル)
      { 
         しようと
         { 
            みてください(=スキャナ新しいスキャナ(ファイル、 "UTF-8" ))
            { 
               ブール =が見つかっ一方、(見出さ&&!in.hasNextLine())
               { 
                  文字列の行 = in.nextLine()。
                  もし(line.contains(キーワード))が発見= ; 
               } 
               戻り見つかりました。
            } 
         } 
         キャッチ(IOExceptionを電子)
         { 
            戻り 
         } 
      } 
   }

  4.2メインプログラム

  

    パブリック クラスThreadPoolTest 
   { 
      公共の 静的な 無効メイン(文字列[] argsが)スロー例外
      { 
         試してみる(=スキャナ新新しいスキャナ(System.in))
         { 
            System.out.print(「検索するディレクトリを入力してください:」を); 
            文字列のディレクトリを = in.nextLine(); 
            System.out.print( "を見つけるためにキーワードを入力してください:" ); 
            文字列キーワード = in.nextLine(); 
      
            ExecutorServiceのプール = Executors.newCachedThreadPool(); 
      
            MatchCounterカウンタ =新しい MatchCounter(新しいファイル(ディレクトリ)、キーワード、プール)。
            将来 <整数>結果= pool.submit(カウンタ)
      
            してみてください
            { 
               System.out.printlnは(result.get() + "匹配的文件" ); 
            } 
            キャッチ(ExecutionException電子)
            { 
               e.printStackTrace(); 
            } 
            キャッチ(InterruptedExceptionある電子)
            { 
            } 
            pool.shutdown()。
      
            INT largestPoolSize = ((ThreadPoolExecutor)プール).getLargestPoolSize(); 
            System.out.printlnは(+ "スレッドプール=の最大数" largestPoolSize); 
         } 
      } 
   }

  4.3業績:

  

 

おすすめ

転載: www.cnblogs.com/lovleo/p/11320901.html
おすすめ