저는 Java에 매우 익숙합니다. 멀티 스레드입니다.Java에서 Countdownlatch 및 Executor를 사용하는 중에 예상 출력이 나타나지 않습니다.
0 Printing .... 1 L 10
0 Printing .... 2 L 10
0 Printing .... 3 L 10
0 Printing .... 4 L 10
0 Printing .... 5 L 10
0 Printing .... 6 L 10
0 Printing .... 7 L 10
0 Printing .... 8 L 10
0 Printing .... 9 L 10
0 Printing .... 10 L 10
다음 흐름이 기다리고 계속 같다 - 자바 스레딩에 CountDownLatch를하고 집행을 배우려고 노력하고하는 것은 앞으로 다음과 같은 코드 -
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ExecutorBasicFramework {
class MyThread extends Thread{
int iCount ; String name;
CountDownLatch latch;
public MyThread(int iCount, String name, CountDownLatch latch) {
super();
this.iCount = iCount;
this.name = name;
this.latch = latch;
}
@Override
public void run() {
for(int i=0;i<10;i++){
System.out.println(name+" Printing .... "+ ++iCount+" L "+latch.getCount());
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
latch.countDown();
}
}
public ExecutorBasicFramework() {
createThread();
}
private void createThread() {
ExecutorService exec = Executors.newFixedThreadPool(10);
CountDownLatch latch = new CountDownLatch(10);
for(int i=0;i<10;i++){
MyThread thread = new MyThread(i*10, ""+i,latch);
exec.execute(thread);
try {
latch.await();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
exec.shutdownNow();
}
public static void main(String[] args) {
new ExecutorBasicFramework();
}
}
출력은 그대로 구현했습니다. 내 예상 출력은 위와 비슷하지만 0을 인쇄 한 후 비슷한 출력을 1에서 9까지 인쇄 한 다음 프로그램을 중지해야합니다.
나는 카운트 다운 래치가 기다리고 기다리는 중이고 실행 프로그램의 다음 카운터를 증가시키지 않을 것이라고 생각한다. 그래서 나는 예상되는 결과물을 얻을 수 없다. 내가 기대하고 출력처럼 - 래치 각각 감소 카운터와
0 Printing .... 1 L 10
0 Printing .... 2 L 10
0 Printing .... 3 L 10
0 Printing .... 4 L 10
0 Printing .... 5 L 10
0 Printing .... 6 L 10
0 Printing .... 7 L 10
0 Printing .... 8 L 10
0 Printing .... 9 L 10
0 Printing .... 10 L 10
1 Printing .... 11 L 9
1 Printing .... 12 L 9
1 Printing .... 13 L 9
1 Printing .... 14 L 9
1 Printing .... 15 L 9
1 Printing .... 16 L 9
1 Printing .... 17 L 9
1 Printing .... 18 L 9
1 Printing .... 19 L 9
1 Printing .... 20 L 9
and So on ...
2 Printing .... 21 L 8
2 Printing .... 22 L 8
2 Printing .... 23 L 8
, 다음 스레드는 프로세스를 다시 풀 10까지 카운트를 실행해야합니다 후 다시 래치 카운터를 감소해야이다 스레드 9가 완료 될 때까지 반복합니다. 동일
일부 입력을 제안하십시오.
모든 작업이 완료 될 때까지 기다리시겠습니까? 여기 목표는 무엇입니까? – Gray