모든 스레드가 완료된 후에 만 코드를 실행하는 방법
-
18-09-2019 - |
문제
결국 실행 해야하는 로깅 코드가 있습니다. Threads
S가 실행됩니다.
Thread t1 = new MyThread();
Thread t2 = new MyThread();
t1.run();
t2.run();
doLogging();
실행할 방법이 있습니까? doLogging()
두 스레드가 처리로 완료된 후에 만. 이제 doLogging()
T1과 T2가 시작 되 자마자 호출됩니다.
해결책
단지 join()
당신 앞에있는 모든 스레드 doLogging()
전화:
t1.join();
t2.join();
// the following line will be executed when both threads are done
doLogging();
순서에 유의하십시오 join()
모든 스레드를 기다리려면 전화가 중요하지 않습니다.
다른 팁
Join () 솔루션 외에도 java.util.concurrent 라이브러리에는 CountdownLatch라는 것이 있습니다. 특정 숫자로 초기화 한 다음 지정된 숫자에 도달 할 때까지 기다릴 수 있습니다.
Simple example:
CountDownLatch latch = new CountDownLatch(NUMBER_OF_THREADS);
for(int i=0; i<NUMBER_OF_THREADS;i++)
new Thread(myCode).start();
latch.await();
그래도 래치는 작업자 스레드에 의해 명시 적으로 타격을 입어야합니다.
latch.countDown()
기본 스레드에서 코드를 실행하는 경우 두 스레드가 완료 될 때까지 UI가 매달릴 것임을 명심하십시오. 이것은 원하는 효과가 아닐 수 있습니다.
대신, 각 스레드가 귀하를 통해 동기화되는 구성을 고려할 수 있습니다. Logger
해당 구조 내에서 객체하고 호출을 수행하십시오. 당신이 구체적으로 달성하려고 노력하는 것을 모르기 때문에 다른 해결책은 무엇입니다. 요아킴 제안서, 해당 코드 만 스레드 내에 배치합니다.
제휴하지 않습니다 StackOverflow