JAVA/포스팅

자바 쓰레드의 실행제어

짜집퍼박사(짜박) 2023. 11. 21. 23:50

자바에서 쓰레드의 실행을 제어하기 위한 주요 메서드 및 기법은 다음과 같습니다.

 

1. start() 메서드

- start() 메서드를 호출하여 쓰레드를 실행시킵니다.
- 내부적으로 JVM이 새로운 쓰레드를 생성하고 run() 메서드를 호출합니다.

Thread myThread = new MyThread();
myThread.start();

 

2. join() 메서드

- join() 메서드를 호출한 쓰레드는 해당 쓰레드의 종료를 기다립니다.
- 다른 쓰레드에서 join()을 호출한 경우, 해당 쓰레드가 종료될 때까지 대기합니다.

Thread myThread = new MyThread();
myThread.start();
myThread.join(); // 현재 쓰레드가 myThread의 종료를 기다림

 

3. sleep() 메서드

- sleep() 메서드를 사용하여 쓰레드를 일정 시간 동안 정지시킬 수 있습니다.
- 예외가 발생하거나 인터럽트가 걸릴 때까지 지정된 시간 동안 대기합니다.

try {
    Thread.sleep(1000); // 1초 동안 정지
} catch (InterruptedException e) {
    e.printStackTrace();
}

 

4. yield() 메서드

- yield() 메서드를 호출한 쓰레드는 다른 동등한 우선순위의 쓰레드에게 실행 기회를 양보합니다.
- 어떤 쓰레드가 실행될지는 JVM에 의해 결정됩니다.

Thread.yield(); // 실행 기회 양보

 

5. interrupt() 메서드

- interrupt() 메서드를 호출하여 쓰레드에게 인터럽트를 걸 수 있습니다.
- 인터럽트가 걸리면 InterruptedException이 발생합니다.

myThread.interrupt(); // 쓰레드에게 인터럽트 걸기

 

6. isAlive() 메서드

- isAlive() 메서드를 사용하여 쓰레드가 현재 실행 중인지 여부를 확인할 수 있습니다.
- 실행 중이면 true를 반환하고, 그렇지 않으면 false를 반환합니다.

if (myThread.isAlive()) {
    System.out.println("쓰레드가 실행 중입니다.");
} else {
    System.out.println("쓰레드가 종료되었습니다.");
}

 

7. stop() 메서드 (비권장)

- stop() 메서드를 사용하여 강제로 쓰레드를 종료할 수 있습니다.
- 그러나 이 메서드는 사용하지 않는 것이 좋으며, 쓰레드 안전성에 문제를 일으킬 수 있습니다.

myThread.stop(); // 비권장: 강제로 쓰레드 종료

위의 메서드들을 조합하여 쓰레드의 실행을 제어할 수 있습니다. 종료 시점, 실행 순서, 대기 등의 제어가 필요한 경우에는 이러한 메서드들을 적절히 활용하여 구현할 수 있습니다.

 

With ChatGPT