start()를 호출할 때 스레드의 메소드는 스레드가 실행을 시작하고 run() 스레드의 메소드는 Java Virtual Machine(JVM)에 의해 호출됩니다. . run()을 직접 호출하는 경우 방법이 없으면 정상 으로 처리됩니다. 재정의된 방법 스레드 클래스(또는 실행 가능한 인터페이스)의 클래스이고 새 스레드가 아닌 현재 스레드의 컨텍스트 내에서 실행됩니다.
예
public class CallRunMethodTest extends Thread {
@Override
public void run() {
System.out.println("In the run() method: " + Thread.currentThread().getName());
for(int i = 0; i < 5 ; i++) {
System.out.println("i: " + i);
try {
Thread.sleep(300);
} catch (InterruptedException ie) {
ie.printStackTrace();
}
}
}
public static void main(String[] args) {
CallRunMethodTest t1 = new CallRunMethodTest();
CallRunMethodTest t2 = new CallRunMethodTest();
t1.run(); // calling run() method directly instead of start() method
t2.run(); // calling run() method directly instead of start() method
}
} 위의 예에서는 두 개의 스레드가 생성되고 start() 메서드를 호출하지 않고 스레드에서 run() 메서드가 직접 호출됩니다.
출력
In the run() method: main i: 0 i: 1 i: 2 i: 3 i: 4 In the run() method: main i: 0 i: 1 i: 2 i: 3 i: 4