위의 예에서는 Thread 클래스의 Join 메소드가 여러 번 사용되었습니다. 조인 메소드의 기능이 무엇인지 짐작하셨을 것 같습니다. 예, 조인 메서드의 기능은 비동기 실행 스레드를 동기 실행으로 전환하는 것입니다. 즉, 스레드 인스턴스의 시작 메소드가 호출되면 즉시 이 메소드가 반환됩니다. 시작 메소드를 호출한 후 이 스레드가 계산한 값을 사용해야 하는 경우에는 Join 메소드를 사용해야 합니다. Join 메소드를 사용하지 않으면 start 메소드 다음에 오는 명령문이 실행될 때 스레드가 실행된다는 보장이 없습니다. 조인 메소드를 사용한 후에는 이 스레드가 종료될 때까지 프로그램이 계속 실행되지 않습니다. 다음 코드는 조인의 사용을 보여줍니다.
다음과 같이 코드 코드를 복사합니다.
패키지 신화 읽기;
공개 클래스 JoinThread는 Thread를 확장합니다.
{
공개 정적 int n = 0;
정적 동기화 무효 inc()
{
n++;
}
공개 무효 실행()
{
for (int i = 0; i < 10; i++)
노력하다
{
Inc();
sleep(3); // 실행 결과를 더 무작위로 만들기 위해 3밀리초를 지연합니다.
}
잡기 (예외 e)
{
}
}
public static void main(String[] args)에서 예외가 발생했습니다.
{
스레드 스레드[] = 새 스레드[100];
for (int i = 0; i < thread.length; i++) // 100개의 스레드 생성
스레드[i] = 새로운 JoinThread();
for (int i = 0; i < thread.length; i++) // 방금 생성된 100개의 스레드를 실행합니다.
스레드[i].start();
if (인수 길이 > 0)
for (int i = 0; i < thread.length; i++) // 100개의 스레드가 모두 실행된 후 계속 진행
스레드[i].join();
System.out.println("n=" + JoinThread.n);
}
}
루틴 2-8에서는 100개의 스레드가 생성되고 각 스레드는 정적 변수 n을 10씩 증가시킵니다. 100개의 스레드가 모두 실행된 후 n이 출력된다면 n 값은 1000이 되어야 합니다.
1. 테스트 1
위의 프로그램을 실행하려면 다음 명령을 사용하십시오.
다음과 같이 코드 코드를 복사합니다.
자바 신화 읽기.JoinThread
프로그램을 실행한 결과는 다음과 같습니다.
다음과 같이 코드 코드를 복사합니다.
n=442
이 실행 결과는 실행 환경에 따라 약간의 차이가 있을 수 있지만 일반적으로 n은 1000과 같지 않습니다. 위의 결과에서 우리는 100개의 스레드가 모두 실행되기 전에 n이 출력된다는 것을 확인할 수 있습니다.
2. 테스트 2
다음 명령을 사용하여 위 코드를 실행합니다.
위의 명령줄에는 매개변수 조인이 있습니다. 실제로 매개변수가 하나만 있으면 명령줄에서 모든 매개변수를 사용할 수 있습니다. 여기서 조인은 조인 메서드가 실행을 동기화하는 데 사용된다는 것을 나타냅니다. 이 100개의 스레드.
프로그램을 실행한 결과는 다음과 같습니다.
다음과 같이 코드 코드를 복사합니다.
n=1000
어떤 운영 환경에서든 위 명령을 실행하면 동일한 결과를 얻게 됩니다: n=1000. 이는 100개의 스레드가 모두 실행되어야 하므로 n이 1000과 같아야 함을 완전히 보여줍니다.