스레딩 개념을 사용하여 다음 코드를 시도했습니다.이 코드에서는 두 개의 다른 클래스에서 두 개의 실행 메서드를 선언했습니다. 내 주요 방법에서 그 방법을 호출했습니다. 사실 내가 알고 싶은 것은, 어느 run() 메서드가 먼저 호출 되었습니까? 나는 여러번 반복해서 실행될 때 같은 코드에 대해 다른 결과를 얻었습니다.어떤 클래스 run() 메서드가 먼저 호출 되었습니까? 그리고 왜?
내 코드 :
class parent
{
public synchronized void display1()
{
System.out.println("Dispaly_1 is invoked");
}
public synchronized void display2()
{
System.out.println("Dispaly_2 is invoked");
}
}
class abc extends Thread{
parent p;
public abc(parent p){
this.p = p;
}
public void run(){
System.out.println("abc start...");
p.display1();
}
}
class xyz extends Thread{
parent p;
public xyz(parent p){
this.p = p;
}
public void run(){
System.out.println("xyz start...");
p.display2();
}
}
public class ThreadExample {
public static void main(String[] args) {
parent p=new parent();
abc ob=new abc(p);
xyz ob1=new xyz(p);
ob.start();
ob1.start();
}
}
출력 : 1 시간
abc start...
xyz start...
Dispaly_2 is invoked
Dispaly_1 is invoked
2 시간
xyz start...
Dispaly_2 is invoked
abc start...
Dispaly_1 is invoked
3 시간
abc start...
Dispaly_1 is invoked
xyz start...
Dispaly_2 is invoked
,536,
이 출력과 혼동 스럽습니다. 누구나이 코드 결과를 설명 할 수 있습니다. 귀하의 도움을 고맙게 생각합니다. 감사합니다.
스레드는 비동기 적으로 실행되며 서로에 대한 정확한 순서는 예측할 수 없습니다. 그것이 바로 그 방법입니다. – markspace