스레드(Thread)는 프로그램의 다른 부분과 동시에 실행될 수 있는 기능 단위입니다. 모든 자바 프로그램에는 최소 한 개의 스레드가 존재하며, 이를 메인 스레드(main thread)라고 합니다. 메인 스레드는 JVM(Java Virtual Machine)이 프로그램 시작 시점에 main() 메서드를 호출할 때 함께 생성됩니다.
자바에서는 일반적으로 Thread 클래스를 상속하거나 Runnable 인터페이스를 구현하는 방식으로 스레드를 생성합니다. 그런데 별도의 클래스를 정의하지 않고 익명 클래스(anonymous class)를 활용하면 Thread 클래스를 상속하지 않고도 간결하게 스레드를 만들 수 있습니다.
예제 코드
public class AnonymousThreadTest {
public static void main(String[] args) {
new Thread() {
public void run() {
for (int i=1; i <= 5; i++) {
System.out.println("run() method: " + i);
}
}
}.start();
for (int j=1; j <= 5; j++) {
System.out.println("main() method: " + j);
}
}
}
실행 결과
main() method: 1 run() method: 1 main() method: 2 run() method: 2 main() method: 3 run() method: 3 main() method: 4 run() method: 4 main() method: 5 run() method: 5
위 예제에서는 new Thread() { ... } 형태로 익명 클래스를 정의하고, 그 안에서 run() 메서드를 오버라이드한 뒤 곧바로 start()를 호출합니다. 이 방식을 사용하면 별도의 서브클래스를 만들 필요 없이 일회성 스레드 작업을 손쉽게 처리할 수 있어 코드가 훨씬 간결해집니다.
실행 결과를 보면 main() 메서드의 출력과 run() 메서드의 출력이 번갈아 나타나는 것을 확인할 수 있습니다. 이는 메인 스레드와 새로 생성된 스레드가 동시에 실행되고 있음을 보여주는 것으로, 멀티스레딩이 실제로 동작하고 있다는 증거입니다.