출력을 이해하는 데 어려움이 있습니다. 여기에 집행자를 만든 다음 Runnable
작업을 1000 번 제출하십시오. 예상 출력은 Runable
안에 synchronized
을 추가 했으므로 1000입니다. 그러나 실제 출력은 503과 다릅니다. 아무에게도 설명해 줄 수 있습니까? bvExecutorService : 출력이 예상되지 않습니다.
public class FutureTest {
int count=0;
public void testExecutor(){
CountDownLatch counter = new CountDownLatch(1000);
Runnable incr =()->{
//System.out.println("count="+count);
synchronized(this){
count++;
}
counter.countDown();
};
ExecutorService service = Executors.newFixedThreadPool(10);
IntStream.range(0, 1000).forEach(i->service.submit(incr));
counter.await();
service.shutdown();
System.out.println(count);
}
public static void main(String[] args) {
new FutureTest().testExecutor();
}
}
모든 스레드가 완료되기 전에 카운트가 인쇄됩니다. 카운트 다운 래치가 필요합니다. –
Runnable에'Thread.sleep (10)'을 추가하면 무슨 뜻인지 알 수 있습니다. 그 다음 count는 0 –
@ NathanHughes이고, 여기에서 'this'는 main 메소드에서 생성 된'new FutureTest()'입니다. –