Java
java에서 Thread를 생성하는 방법
Wanderer Kim
2025. 5. 26. 23:57
728x90
java에서 thread를 생성하는 방법들을 알아보자
Thread 상속
public class HelloThread extends Thread {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + ": run()");
}
}
public class HelloThreadMain {
public static void main(String[] args) {
System.out.println(Thread.currentThread().getName() + ": main()
start");
HelloThread helloThread = new HelloThread();
System.out.println(Thread.currentThread().getName() + ": start() 호출
전");
helloThread.start();
System.out.println(Thread.currentThread().getName() + ": start() 호출
후");
System.out.println(Thread.currentThread().getName() + ": main() end");
}
}
main: main() start
main: start() 호출 전
main: start() 호출 후
Thread-0: run()
main: main() end
```
- Thread 클래스를 상속하고, thread가 실행할 코드를 run() 메서드에 재정의한다.
- Thread.currentThread(): 해당 코드를 실행하는 스레드 객체를 조회할 수 있다.
- Thread.currentThread().getName(): 실행 중인 스레드의 이름을 조회한다.
- Thread를 상속받는 HelloThread를 생성 후 start()를 호출하면 스레드가 실행된다.
- 만약 start() 메서드가 아니라 run() 메서드를 직접 호출하게 되면 새로운 스레드가 생성되지 않고 main스레드가 HelloThread를 직접호출하게 된다.
- 예제 코드 실행 결과를 보면 main 실행 흐름과 상관없이 thread가 시작되고 끝나는 것을 볼 수 있다.
시간 흐름으로 분석
- main 스레드가 HelloThread 인스턴스를 생성한다. 이때 스레드 이름을 지정하지 않으면 THread-0, Thread-1과 같은 임의의 이름을 부여한다.
- start() 메서드를 호출하면, Thread-0 스레드가 시작되면서 Thread-0 스레드가 run() 메서드를 호출한다.
- 중요한 점은 main 스ㅔㄹ드가 run() 메서드를 실행하는게 아니라 Thread-0 스레드가 run() 메서드를 실행한다는 점이다.
- main 스레드는 단지 start() 메서드를 통해 Thread-0 스레드에게 실행을 지시할 뿐이다.
- 이제 main 스레드와 THread-0 스레드는 동시에 실행된다.
스레드 간 실행 순서는 보장하지 않는다.
스레드는 동시에 실행되기 때문에 스레드 간에 실행 순서는 얼마든지 달라질 수 있다. 따라서 다음과 같이 다양한 실행 결과가 나올 수 있다.
main 스레드가 빨리 실행된 경우
main: main() start
main: start() 호출 전
main: start() 호출 후
main: main() end
Thread-0: run()
Thread-0 스레드가 빨리 실행된 경우
main: main() start
main: start() 호출 전
Thread-0: run()
main: start() 호출 후
main: main() end
```
main 스레드가 실행 중간에 Thread-0스레드가 실행된 경우
main: main() thread.start
main: start() 호출 전
main: start() 호출 후
Thread-0: run()
main: main() end
반응형