멀티 스레드 실행을 동기화하는 방법
멀티 스레드 애플리케이션에서는 병렬 작업 실행을 조정해야 하는 경우가 많습니다. 이 문서에서는 계속하기 전에 스레드 그룹이 완료될 때까지 기다리는 방법을 살펴봅니다.
문제:
다음 코드를 고려하세요.
<code class="java">public class DoSomethingInAThread implements Runnable {...} public static void main(String[] args) { for (int n=0; n<1000; n++) { Thread t = new Thread(new DoSomethingInAThread()); t.start(); } // wait for all threads' run() methods to complete before continuing }</code>
이 예에서는 여러 개의 새 스레드가 생성되고 시작됩니다. 그러나 main() 메소드는 스레드가 작업을 완료할 때까지 기다리지 않고 즉시 실행을 계속합니다.
해결책:
실행을 동기화하기 위해 다음을 생성할 수 있습니다. 스레드 참조 배열을 만든 다음 각 스레드 개체에서 Join() 메서드를 사용합니다. 이는 대상 스레드가 실행을 완료할 때까지 현재 스레드를 차단합니다.
<code class="java">import java.lang.Thread; public class DoSomethingInAThread implements Runnable {...} public static void main(String[] args) { Thread[] threads = new Thread[1000]; for (int n=0; n<threads.length; n++) { threads[n] = new Thread(new DoSomethingInAThread()); threads[n].start(); } for (Thread t: threads) { t.join(); } }</code>
이 수정된 코드에서 main() 메서드는 스레드 참조 배열을 생성하고 각 스레드를 시작합니다. 그런 다음 배열의 모든 스레드에서 Join()을 호출하는 루프에 들어갑니다. 이렇게 하면 main() 메서드가 계속되기 전에 모든 스레드가 작업을 완료할 수 있습니다.
위 내용은 계속하기 전에 여러 스레드가 실행을 마칠 때까지 기다리는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!