myThread extends Thread{
@Override
public void run() {
...
}
}
myThread thread = new myThread();
thread.start();
myThread2 implements Runnable{
@Override
public void run() {
...
}
}
myThread2 runnableThread = new myThread2();
Thread myThread = new Thread(runnableThread);
myThread.start();
해당 클래스 생성자호출and객체에담음 => (Thread클래스생성자호출) => Thread클래스객체.start(); 이 과정으로 쓰레드는 실행된다.
여기서 start()와 run()의차이는 run()의경우 클래스내부의 메소드를 온전히 실행시키는것에 그치므로, run메소드안에 코드가 갇히게된다. 예로들어 main메소드에서 run()을 호출해버리면, run()이 만드는 쓰레드코드가 전부 끝나야 다시 main 메소드로온다는소리.
즉 쓰레드의 원래 역할인 병행작업하려면 start();를 쓰자.
run()메소드안의 코드는 스레드로작업이돌아가는것, 그메소드에 컴파일러가 갇히지않는다는것 , start()메소드는 run()메소드를 찾아서 실행시키는것을 명심