실행중인 프로그램을 의미 (a program in execution)
싱글쓰레드 = 자원 + 쓰레드
멀티쓰레드 = 자원 + 쓰레드 + 쓰레드 + ...
📌 java에서 main 메서드를 실행하기 위해서도 main 쓰레드가 필요하다. 프로그램이 실행되면 main 쓰레드가 기본적으로 생성되고, main 쓰레드가 main 메서드를 호출함으로써 작업이 수행될 수 있다.
Thread는 Thread 클래스를 상속 받거나 Runnable인터페이스를 implement 함으로써 구현할 수 있다.
class MyThread extends Thread { public void run() {...} }
class MyThread implements Runnable { public void run() {...} }
Runnable 인터페이스를 사용하면 재사용성(reusability)이 높고 코드의 일관성을 유지할 수 있다.
Runnable 인터페이스: 추상메서드인 run()만 정의되어 있는 인터페이스이다.
public interface Runnable { public abstract void run(); }
Thread thread = new Thread(new ThreadExample());
public class ThreadExample implements Runnable {
@Override
public void run() {
for (int i = 0; i < 3; i++) {
// static Thread currentThread(): 현재 실행중인 쓰레드의 참조를 반환
// String getName(): 쓰레드의 이름을 반환
System.out.println(Thread.currentThread().getName());
}
}
}
class Main {
public static void main (String[] args) {
Thread threadA =new Thread(new ThreadExample());
Thread threadB =new Thread(new ThreadExample());
Thread threadC =new Thread(new ThreadExample());
threadA.start(); // start(): 쓰레드 실행
threadB.start();
threadC.start();
}
}
위의 코드에서 start()가 아닌 run()을 호출한다면, 생성된 쓰레드가 실행되는 것이 아니라 클래스에 선언된 메서드가 호출된다.
따라서 새로운 쓰레드가 작업하는데 필요한 call stack을 생성한 다음에 run()을 호출하기 위해서는 쓰레드를 실행시키는 명령어인 start()를 사용해야 한다.
Source