0
소프트는 일부 계산을 수행해야합니다 : 총 62500 개의 루프와 하나의 루프 지속 시간은 0.5 초입니다. 그것은 ~ 8 시간의 일 (for for for for)입니다. 나는 100 개의 개별 스레드로 나눠야하며 작업 시간은 8 분으로 단축됩니다. CPU가 62500 스레드를 열 수 없기 때문에 100 개 스레드를 다시 열 수있는 솔루션을 찾아야합니다. CountDownLatch를 사용해 보았지만 사이클을 재설정 할 수 없기 때문에 CyclicBarrier가됩니다.Java : 순환 복소수가 작동하지 않습니다.
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
무엇이 당신의 질문입니까? –
왜 100 대신 한 번에 200 스레드를 여는거야? –