アクティブなスレッドの数を維持する方法 - Javaの

kichuf1:

助けが必要

私はすべてのこれらのタスクは、固定なしのスレッドを介して行わないことにしたい250のタスク数を持っています。EX 10はので、私は、各スレッドに一つのタスクを送りたいです

t1 =1
t2=2
.
.
.

現在私は、これらの10個のスレッドのうちの各スレッドピック一つのタスクようにコードを書かれています。すべての10個のスレッドを使用して行われまで、私は待つことになるthread.join().ANDを10個のスレッドを作成し、各スレッドに一つのタスクを送り、再び。

問題:

スレッドのいくつかは、タスクを実行終了しているが。私はまだ、完全に他のスレッドを待つ必要があります。私は、10〜としてスレッド数を維持したいです。一つのスレッドがタスクを終了した場合に10件のスレッド間、それが別のタスクと同様に他の人を選ぶことができればそれです。

すべてのソリューション?

私のコード:


for(int i=0;i<finData.size();i++){
      ArrayList<Thread> AllThreads = new ArrayList<>();

      if(i+10 <= finData.size()){
          p=i+10;
      }else{
          p=i+10-finData.size();                            
      } 

     for(int k=i;k<p;k++){
        FeeConfigCheck = new  Thread(new FeeConfigCheck(finData.get(k)));
        AllThreads.add(FeeConfigCheck);
        FeeConfigCheck.start(); 
        Thread.sleep(100);                          
     }  

     for(int h=0;h<AllThreads.size();h++){
        AllThreads.get(h).join();
     }
     if(p<10){
            System.out.println("Pointer----------------"+i);
            break;
     }
     i=p;
     System.out.println("Pointer----------------"+i);
}
rzwitserloot:

あなたは車輪の再発明しています。これは必要ありませんです。Javaはすでに、その後のスレッドの固定数を加えたタスクの数、およびこのスレッドの固定数を有していて、すべてのタスクを処理するための機能が含まれていますエグゼキューを

ExecutorService pool = Executors.newFixedThreadPool(10);
for (int k = i; k < p; k++) {
    Runnable r = new FooConfigCheck(finData.get(k));
    pool.submit(r);
}
pool.shutdown();
while (!pool.awaitTermination(1000, TimeUnit.SECONDS)) ;

それはあなたがここにしなければならないすべてです。

あなたがそれを求めることができ、様々なもののために、これらのクラスのJavadocを参照してください。キューにどのように多くの作業しているあなたは、その情報が必要な場合は、あなたが求めることができるものです。

EDIT:シャットダウンへの呼び出しを追加しました。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=364518&siteId=1