어떤 자바 애플리케이션건 메인 스레드는 반드시 존재하기 때문에 메인 작업 이외에 추가적인 병렬 작업의 수만큼 스레드를 생성하면 됩니다. 자바에서는 작업 스레드도 객체로 생성되기 때문에 클래스가 필요합니다. java.lang.Thread 클래스를 직접 객체화해서 생성해도 되지만, Thread 클래스를 상속해서 하위 클래스를 만들어 생성할 수도 있습니다.
== Thread 생성 방법 == === 1. Thread 클래스로부터 직접 생성 ===
java.lang.Thread 클래스로부터 작업 스레드 객체를 직접 생성하려면 다음과 같이 Runnable 을 매개값으로 갖는 생성자를 호출해야 합니다.
}
});
thread.start();
for (int i = 0; i < 5; i++) {
System.out.println("띵");
try { Thread.sleep(500); } catch(Exception e) {}
}
}
}
</nowiki>
== 2. Thread 하위 클래스로부터 생성 ==
작업 스레드가 실행할 작업을 Runnable 로 만들지 않고, Thread의 하위 클래스로 작업 스레드를 정의하면서 작업 내용을 포함시킬 수도 있습니다.
다음은 작업 스레드 클래스를 정의하는 방법인데, Thread 클래스를 상속한 후 run() 메소드를 재정의(overriding)해서 스레드가 실행할 코드를 작성하면 됩니다. 작업 스레드 클래스로부터 작업 스레드 객체를 생성하는 방법은 일반적인 객체를 생성ㅎ는 방법과 동일합니다.
<nowiki>
public class WorkerThread extends Thread {
@Override
public void run() {
스레드가 실행할 코드;
}
}
</nowiki>
코드를 좀 더 절약하기 위해 다음과 같이 Thread 익명 객체로 작업 스레드 객체를 생성할 수도 있습니다.
<nowiki>
Thread thread = new Thread() {
public void run() {
스레드가 실행할 코드;
}
};
</nowiki>
앞의 예제를 Thread 하위 클래스로부터 생성하는 방법으로 수정한 코드는 아래와 같다.
<nowiki>
import java.awt.Toolkit;
public class BeepThread extends Thread {
@Override
public void run() {
Toolkit toolkit = Toolkit.getDefaultToolkit();
for (int i = 0; i < 5; i++) {
toolkit.beep();
try { Thread.sleep(500); } catch(Exception e) {}
}
}
}
</nowiki>
<nowiki>
public class BeepMainThread {
public static void main(String[] args) {
Thread thread = new BeepThread();
thread.start();