> Java > java지도 시간 > 본문

`Thread.stop()`을 사용하지 않고 Java 스레드를 안전하게 중지하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-11-22 09:27:11
원래의
755명이 탐색했습니다.

How to Safely Stop a Java Thread Without Using `Thread.stop()`?

더 이상 사용되지 않는 Thread.stop() 메서드를 사용하지 않고 효과적으로 스레드를 종료하는 방법

Java Thread 클래스는 stop() 메서드를 제공합니다. 스레드를 종료하는 수단으로 사용되지만 더 이상 사용되지 않으므로 사용해서는 안 됩니다. 이 기사에서는 인터럽트 메소드를 사용하여 스레드를 종료하는 대체 접근 방식을 제시합니다.

인터럽트를 사용하여 스레드 중지

안전하지 않은 stop()을 직접 호출하는 대신 데이터 손상이 발생할 수 있으므로 인터럽트를 사용하여 스레드가 정상적으로 종료되어야 한다는 신호를 보낼 수 있습니다. 작동 방식은 다음과 같습니다.

public class InterruptedExceptionExample {

    private static volatile boolean shutdown = false;

    public static void main(String[] args) {
        Thread thread = new Thread(() -> {
            while (!shutdown) {
                try {
                    System.out.println("Running...");
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                }
            }
        });

        thread.start();
        System.out.println("Press enter to quit");
        try {
            System.in.read();
        } catch (IOException e) {
            e.printStackTrace();
        }

        shutdown = true;
        thread.interrupt();
    }
}
로그인 후 복사

이 코드에서는

  1. 매 5초마다 "Running..."을 인쇄하면서 루프에서 무기한 실행되는 스레드를 생성합니다.
  2. false로 초기화된 정적 부울 플래그(종료)가 있는데, 이는 스레드에 신호를 보내는 데 사용됩니다. stop.
  3. 스레드의 run() 메소드는 종료 플래그를 정기적으로 확인합니다. true로 설정되면 스레드가 루프를 종료합니다.
  4. main() 메서드는 스레드를 생성하고 시작한 다음 종료 플래그를 true로 설정하기 위한 사용자 입력을 기다립니다.
  5. 마지막으로, 스레드는 인터럽트()를 사용하여 정상적으로 종료됩니다.

사용의 장점 중단:

스레드 중단은 더 이상 사용되지 않는 stop()에 비해 여러 가지 이점을 제공합니다.

  • 우아한 종료: 중단된 스레드는 정리할 기회가 있습니다. 종료하기 전에 자원을 확보하거나 필요한 작업을 수행하십시오.
  • 예외 던지기: 중단으로 인해 sleep() 및 wait()와 같은 특정 메서드가 InterruptedException 예외를 발생시킵니다. 잘 작성된 스레드는 이러한 예외를 포착하여 중단을 처리할 수 있습니다.
  • 안전하고 견고함: 데이터 손상을 일으킬 수 있는 stop()과 달리 중단은 더 안전하고 안정적인 종료 방법입니다. 스레드.

위 내용은 `Thread.stop()`을 사용하지 않고 Java 스레드를 안전하게 중지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿