위의 예에서는 Thread 클래스의 Join 메소드가 여러 번 사용되었습니다. 조인 메소드의 기능이 무엇인지 짐작하셨을 것 같습니다. 예, 조인 메서드의 기능은 비동기 실행 스레드를 동기 실행으로 전환하는 것입니다. 즉, 스레드 인스턴스의 시작 메소드가 호출되면 즉시 이 메소드가 반환됩니다. 시작 메소드를 호출한 후 이 스레드가 계산한 값을 사용해야 하는 경우에는 Join 메소드를 사용해야 합니다. Join 메소드를 사용하지 않으면 start 메소드 다음에 오는 명령문이 실행될 때 스레드가 실행된다는 보장이 없습니다. 조인 메소드를 사용한 후에는 이 스레드가 종료될 때까지 프로그램이 계속 실행되지 않습니다.
다음 코드는 조인 사용을 보여줍니다.
package mythread; public class JoinThread extends Thread { public static volatile int n = 0; public void run() { for (int i = 0; i < 10; i++, n++) try { sleep(3); // 为了使运行结果更随机,延迟3毫秒 } catch (Exception e) { } } public static void main(String[] args) throws Exception { Thread threads[] = new Thread[100]; for (int i = 0; i < threads.length; i++) // 建立100个线程 threads[i] = new JoinThread(); for (int i = 0; i < threads.length; i++) // 运行刚才建立的100个线程 threads[i].start(); if (args.length > 0) for (int i = 0; i < threads.length; i++) // 100个线程都执行完后继续 threads[i].join(); System.out.println("n=" + JoinThread.n); } }
루틴 2~8에서는 100개의 스레드가 생성되고, 각 스레드는 정적 변수 n을 10씩 증가시킵니다. 100개의 스레드가 모두 실행된 후 n이 출력된다면 n 값은 1000이 되어야 합니다.
1. 테스트 1
다음 명령을 사용하여 위 프로그램을 실행합니다.
1 java mythread.JoinThread
프로그램 실행 결과는 다음과 같습니다.
1 n=442
이 실행 결과는 실행 환경에 따라 약간의 차이가 있을 수 있지만 일반적으로 n은 1000이 아닙니다. 위 결과에서 100개의 스레드가 모두 실행되지 않은 것이 확실합니다. .그러면 n이 출력됩니다.
2. 테스트 2
다음 명령을 사용하여 위 코드를 실행합니다.
위 명령에는 조인 매개변수가 있습니다. line 실제로 하나의 매개변수만 있으면 명령줄에서 모든 매개변수를 사용할 수 있습니다. 여기서 Join은 조인 메소드가 이러한 100개 스레드의 실행을 동기화하는 데 사용됨을 나타 내기 위해 사용됩니다.
프로그램 실행 결과는 다음과 같습니다.
1 n=1000
어떤 운영 환경에서든 위 명령을 실행하면 동일한 결과가 나타납니다: n=1000. 100 모든 스레드가 실행되어야 하므로 n은 1000과 같아야 합니다.
위 내용은 자바 스레드의 조인 방식 사용에 대한 소개입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!