방법1. Thread 클래스를 상속받는 방법
class MyThread extends Thread {
public void run() {
/* 작업내용 */
} // Thread 클래스의 run()을 오버라이딩
}
방법2. Runnable인터페이스를 구현하는 방법 ⇒ 더 일반적 & 재사용성이 높고 코드의 일관성 유지할 수 있음. 그래서 더 객체지향적임
class MyThread implements Runnable {
public void run() {
/* 작업내용 */
} // Runnable 인터페이스의 run()을 구현
}
⇒ 구현코드
class ThreadEx1 {
public static void main(String[] args) {
ThreadEx1_1 t1 = new ThreadEx1_1();
Runnable r = new ThreadEx1_2();
Thread t2 = new Thread(r); // 생성자 Thread(Runnable target)
t1.start();
t2.start();
}
}
class ThreadEx1_1 extends Thread { // 방법 1
public void run() {
for (int i=0; i<5; i++) {
System.out.println(getName()); // 조상인 Thread의 getName()을 호출
}
}
}
class ThreadEx1_2 implements Runnable { // 방법 2
public void run() {
for (int i=0; i<5; i++) {
// Thread.currentThread(); // 현재 실행 중인 Thread를 반환
System.out.println(Thread.currentThread().getName()); // Thread 클래스의 static 메서드인 curent Thread()를 호출하여 쓰레드에 대한 참조를 얻어와야만 호출 O
}
}
}
start()
주의1. 쓰레드는 자동 실행 X → start() 를 호출해야만 쓰레드 실행 O
주의2. 한 번 실행이 종료된 쓰레드는 다시 실행할 수 X ⇒ 한번 더 수행하고 싶으면 새로운 쓰레드 생성 후, start() 호출해야 함
ThreadEx1_1 t1 = new ThreadEx1_1();
t1.start();
t1.start(); // 예외 발생
t1= new ThreadEx1_1(); //다시 생성
t1.start(); // OK
run() : 단순히 클래스에 선언된 메서드를 호출하는 것 ⇒ 스레드 실행시키는 것 X