문제

결국 실행 해야하는 로깅 코드가 있습니다. ThreadsS가 실행됩니다.

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 해당 구조 내에서 객체하고 호출을 수행하십시오. 당신이 구체적으로 달성하려고 노력하는 것을 모르기 때문에 다른 해결책은 무엇입니다. 요아킴 제안서, 해당 코드 만 스레드 내에 배치합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top