Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:CyclicBarrier不工作_Java_Multithreading_Loops_Cycle_Barrier - Fatal编程技术网

Java:CyclicBarrier不工作

Java:CyclicBarrier不工作,java,multithreading,loops,cycle,barrier,Java,Multithreading,Loops,Cycle,Barrier,软件应该做一些计算:总共62500个循环,一个循环的持续时间是0.5秒。那将是大约8个小时的工作时间。我必须分为100个独立的线程和工作时间将减少到8分钟的工作。我不能打开62500个线程,因为CPU,我必须找到一个解决方案,只打开100个线程,而不是再打开100个线程。我尝试使用倒计时锁存器,但无法重置周期,因此我的解决方案是CyclicBarrier private CycleBarrier cb; // this Overrided run is called only once fro

软件应该做一些计算:总共62500个循环,一个循环的持续时间是0.5秒。那将是大约8个小时的工作时间。我必须分为100个独立的线程和工作时间将减少到8分钟的工作。我不能打开62500个线程,因为CPU,我必须找到一个解决方案,只打开100个线程,而不是再打开100个线程。我尝试使用倒计时锁存器,但无法重置周期,因此我的解决方案是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;
      }
   }
}
cb=new cyclebarier(100,new Runnable(){
@凌驾
公开募捐{
//如何停止循环???
}
});
对于(int i=0;i<100;i++){
新线程(新测试(x1,cb)).start();
x1+=25;
}

在代码中,您正在一个新的Runnable中打开一个新的线程对象。所以有两个线程。

你的问题是什么?为什么一次打开200个线程而不是100个?
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();
   }
}
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
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;
  }