0

ソフトはいくつかの計算を行う必要があります。合計62500ループで、1つのループ期間は0.5秒です。それは約8時間の作業になります(for in for in for)。100の別々のスレッドに分割する必要があり、作業時間は8分の作業に短縮されます。CPUが原因で、62500スレッドを開くことができません。もう一度、100スレッドよりも100スレッドだけ開くための解決策を見つける必要があります。CountDownLatchで試しましたが、サイクルをリセットできないため、解決策はCyclicBarrierになります。

private CycleBarrier cb;

// this Overrided run is called only once from the view to not block the UI.
@Override
public void run(){

   // count is the number of the actions that i want to do
   // this is why I'm using CycleBarrier
   for(int count = 0; count < 2; count++){
      System.out.println("MAIN THREAD: #"+count);

      int x1 = 0;
      cb = new CycleBarrier(100, new Runnable(){
         @Override
         public void run(){
            // HOW TO STOP CYCLE ???
         }
      });

      for(int i = 0; i < 100; i++){
         new Thread(new Test(x1, cb)).start();
         x1 += 25;
      }
   }
}

そしてテストクラス

public class Test implements Runnable{

   int x1;
   CycleBarrier cb;

   public Test(int _x1, CycleBarrier _cb){
      x1 = _x1;
      cb = _cb;
   }

   @Override
   public void run(){
      // this for in for has 6250 loops
      for(int i = x1; < x1+25; i++){
         for(int j = 0; j < 250; j++){
            System.out.println("   |--> LOOK I'm WORKING: "+i+" "+j);
         }
      }

      // After the job is done, it should be put in to await
      cb.await();
   }
}

サイクルが機能していません。一度に200を開きます。デバッグ(日食)しようとしましたが、理由がわかりません。スレッドが次から次へとジャンプし、結果を追跡できません。

コンソールは次のようになります。

MAIN THREAD: #0
   LOOK I'm WORKING: 0 0
   LOOK I'm WORKING: 0 1
   ...
   LOOK I'm WORKING: 25 254
   LOOK I'm WORKING: 25 255

MAIN THREAD: #1
   LOOK I'm WORKING: 0 0
   LOOK I'm WORKING: 0 1
   ...
   LOOK I'm WORKING: 25 254
   LOOK I'm WORKING: 25 255
4

1 に答える 1

0
cb = new CycleBarrier(100, new Runnable(){
@Override
 public void run(){
        // HOW TO STOP CYCLE ???
     }
  });

  for(int i = 0; i < 100; i++){
     new Thread(new Test(x1, cb)).start();
     x1 += 25;
  }

コードでは、新しい Runnable 内で新しいスレッド オブジェクトを開いています。したがって、2 つのスレッドがあります。

于 2013-02-12T02:25:13.367 に答える