>  기사  >  Java  >  Java에서 스레드 종료를 중지하는 방법은 무엇입니까?

Java에서 스레드 종료를 중지하는 방법은 무엇입니까?

PHPz
PHPz원래의
2024-04-11 14:33:02786검색

Java에는 스레드를 중지하고 종료하는 네 가지 방법이 있습니다. Interrupt() 메서드: 스레드를 중단하고 InterruptedException 예외를 발생시킵니다. stop() 메서드: 스레드를 즉시 중지하여 데이터 손실이 발생할 수 있으므로 권장되지 않습니다. 인터럽트 플래그 설정: 스레드가 종료되어야 하는지 여부를 결정하기 위해 폴링할 스레드에 대한 플래그를 설정합니다. Join() 사용: 다른 스레드에서 Join()을 호출하는 스레드가 종료될 때까지 현재 스레드를 차단합니다.

Java에서 스레드 종료를 중지하는 방법은 무엇입니까?

Java에서 스레드 종료를 중지하는 방법

Java에서는 스레드를 여러 가지 방법으로 종료할 수 있습니다. 스레드를 적절하게 종료하는 방법을 이해하는 것은 애플리케이션 안정성과 성능을 보장하는 데 중요합니다. 이 기사에서는 스레드를 중지하고 종료하는 일반적인 방법과 실제 사례를 첨부하여 설명합니다.

방법 1: Interrupt() 방법

interrupt() 방법은 스레드의 실행을 중단하는 데 사용할 수 있습니다. 스레드가 휴면 상태이거나 I/O를 기다리는 경우 InterruptedException 예외가 발생합니다. 다음 실제 사례에서는 interrupt() 메서드를 사용하여 휴면 중인 스레드를 중지합니다. interrupt() 方法可用于中断线程的执行。如果线程正在休眠或等待I/O,则会收到一个 InterruptedException 异常。在以下实战案例中,我们使用 interrupt() 方法来停止一个正在休眠的线程:

public class InterruptThreadExample {

    public static void main(String[] args) throws InterruptedException {
        Thread thread = new Thread(() -> {
            try {
                Thread.sleep(10000); // 睡 10 秒
            } catch (InterruptedException e) {
                System.out.println("已中断!");
            }
        });

        thread.start();
        Thread.sleep(1000); // 睡 1 秒

        thread.interrupt();
        thread.join(); // 等待线程终止
    }
}

输出:

已中断!

方法 2:stop() 方法

不推荐使用 stop() 方法,因为它会立即停止线程,可能导致数据丢失或应用程序不稳定。强烈建议使用 interrupt() 方法代替。

方法 3:设置中断标志

您可以设置一个中断标志,供线程轮询。当该标志设为 true 时,线程知道它应该终止:

public class InterruptFlagExample {

    private volatile boolean interrupted = false;

    public static void main(String[] args) throws InterruptedException {
        InterruptFlagExample example = new InterruptFlagExample();

        Thread thread = new Thread(() -> {
            while (!example.isInterrupted()) {
                // 做一些事情
            }
        });

        thread.start();
        Thread.sleep(1000); // 睡 1 秒

        example.setInterrupted(true);
        thread.join(); // 等待线程终止
    }

    public void setInterrupted(boolean interrupted) {
        this.interrupted = interrupted;
    }

    public boolean isInterrupted() {
        return interrupted;
    }
}

方法 4:使用 Join

join() 方法可以用来停止和等待线程终止。它将阻塞当前线程,直到另一个线程调用了 join()

public class JoinExample {

    public static void main(String[] args) throws InterruptedException {
        Thread thread = new Thread(() -> {
            try {
                Thread.sleep(10000); // 睡 10 秒
            } catch (InterruptedException e) {}
        });

        thread.start();
        thread.join(); // 等待线程终止
    }
}

출력:

rrreee

방법 2: stop() 메서드 🎜🎜권장되지 않음 stop( ) 메서드를 사용하면 스레드가 즉시 중지되어 잠재적으로 데이터 손실이나 애플리케이션 불안정이 발생할 수 있기 때문입니다. 대신 interrupt() 메서드를 사용하는 것이 좋습니다. 🎜🎜방법 3: 인터럽트 플래그 설정🎜🎜폴링할 스레드에 대한 인터럽트 플래그를 설정할 수 있습니다. 이 플래그가 true로 설정되면 스레드는 자신이 종료되어야 한다는 것을 알게 됩니다. 🎜rrreee🎜방법 4: Join 사용🎜🎜 join() 메서드를 사용하여 중지하고 스레드가 종료될 때까지 기다릴 수 있습니다. . join()을 호출하는 다른 스레드가 종료될 때까지 현재 스레드를 차단합니다. 🎜rrreee🎜이는 다른 스레드가 종료될 때까지 10초 동안 현재 스레드를 차단합니다. 🎜

위 내용은 Java에서 스레드 종료를 중지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.