Thread 생성방법 이해
1. new Thread
① Thread 클래스를 상속받은 후, run() 메소드를 원하는 작업을 하도록 오버라이딩
② 완성된 클래스를 생성한 후, start() 메소드를 실행
② 완성된 클래스를 생성한 후, start() 메소드를 실행
<MyThread.java> public class MyThread extends Thread { public void run() { // 실행할 명령들 while(true) // 무한루프 { System.out.println("쓰레드가 실행 중입니다."); } } } ... MyThread mythread = new MyThread(); mythread.start(); ...
start() 메소드가 호출되면 자동으로 쓰레드가 생성되고, 생성된 쓰레드는 자동으로 run() 메소드를 실행합니다. 따라서 run() 메소드에는 실제 쓰레드가 실행할 모든 일을 정의하게 됩니다. run() 메소드가 종료되면 쓰레드는 자동적으로 소멸되기 때문에, while문과 같은 반복문으로 일정한 횟수만큼 반복하게 하거나 무한루프를 만듭니다. 쓰레드는 무한루프에 빠지더라도 null 값을 대입하기만 하면 언제든지 제거할 수 있기 때문에, 다음처럼 무한루프로 만드는 경우가 많습니다.
메소드 | 설명 |
---|---|
void start() | 쓰레드 생성하고 run() 메소드를 실행시키는 메소드 |
void run() | 쓰레드가 할 일을 정의한 메소드 |
String getName() | 쓰레드의 이름을 반환 |
void setName() | 쓰레드의 이름을 설정 |
void sleep(long millis) | 1000분의 millis 초 만큼 쓰레드를 중지시킨 후, 재실행 |
boolean isAlive() | 쓰레드가 살아있는지 확인 |
2. Runnable
① Runnable 인터페이스를 상속받은 후, run() 메소드를 원하는 작업을 하도록 구현
② 완성된 클래스를 생성한 후, Thread 클래스의 생성자에게 인수로 전달
② 완성된 클래스를 생성한 후, Thread 클래스의 생성자에게 인수로 전달
<MyRun.java> public class MyRun implements Runnable { public void run() { // 실행할 명령들 } } ... MyRun myrun = new MyRun(); Thread t = new Thread(myrun); // 생성한 myrun 객체를 인수로 쓰레드 생성 t.start(); ...
Thread 클래스를 상속받아 클래스를 만드는 경우에는 해당 클래스의 start() 메소드를 직접 호출했지만, Runnable 인터페이스를 상속받는 경우에는 Runnable 인터페이스로 구현한 클래스의 객체를 인수로 주어 Thread 클래스의 객체를 생성한 후, 생성된 Thread 객체의 start() 메소드를 호출해주어야 합니다.
Thread 클래스의 생성자는 Runnable 인터페이스의 서브클래스를 인수로 받으면, 해당 클래스의 run() 메소드를 실행하는 쓰레드를 만듭니다.