Java/쓰레드

쓰레드 클래스(Thread Class)

asd135 2023. 9. 25. 20:33
728x90

자바에서 쓰레드를 생성하고 사용하는 기본적인 방법 중 하나는 Thread 클래스를 상속받아서 사용하는 것이다.

run() 메서드를 오버라이드하여 쓰레드가 수행할 작업을 정의한다.

그리고 쓰레드를 시작하기 위해서는 start() 메서드를 호출한다.

 


쓰레드 생성

public class HelloWorld {
    public static void main(String[] args) throws Exception{
        MyThread t1 = new MyThread(); // 쓰레드 생성
        t1.start(); // 쓰레드 시작
    }
}
class MyThread extends Thread {
    public void run() { // run 메서드 오버라이딩
        for(int i=0; i<10; i++) {
            System.out.println(i);
        }
    }
}

 


start() 메서드 역할

 

start() 메서드를 호출하면 JVM은 새로운 쓰레드를 생성하고, 그 쓰레드의 호출 스택에 run() 메서드를 넣는다.

따라서, start() 메서드는 단순히 run() 메서드를 호출하는 것이 아니라, 실제로 별도의 실행 흐름(쓰레드)을 시작하는 작업을 수행한다. 이 과정에서 각 쓰레드는 자신만의 호출 스택을 가지게 되며, 이 안에는 해당 쓰레드에서 실행되어야 할 메서드들이 저장됩니다.

하나의 프로그램 안에서 여러 개의 쓰레드를 생성하면 각각의 쓰레드는 독립적인 호출스택을 가지게 된다. 이 때문에 서로 다른 쓰래드들 끼리 간에 메서드 호출과 변수 사용 등이 서로 영향을 미치지 않는다. 그래서 공유된 데이터에 대한 동시 접근은 멀티쓰레드 환경에서 주의해야 한다.

 


run() 메서드를 직접 호출하면?

 

run() 메서드를 직접 호출하면, 새로운 쓰레드를 생성하는 대신 현재 쓰레드에서 run() 메서드가 실행된다. 일반적인 메서드 호출과 동일하게 작동하며, 별도의 실행 흐름을 만들지 않는다.

 

출처

Oracle Java Documentation - Defining and Starting a Thread
Oracle Java Documentation - The Thread Class