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