Java에는 스레드를 중지하고 종료하는 네 가지 방법이 있습니다. Interrupt() 메서드: 스레드를 중단하고 InterruptedException 예외를 발생시킵니다. stop() 메서드: 스레드를 즉시 중지하여 데이터 손실이 발생할 수 있으므로 권장되지 않습니다. 인터럽트 플래그 설정: 스레드가 종료되어야 하는지 여부를 결정하기 위해 폴링할 스레드에 대한 플래그를 설정합니다. Join() 사용: 다른 스레드에서 Join()을 호출하는 스레드가 종료될 때까지 현재 스레드를 차단합니다.
Java에서는 스레드를 여러 가지 방법으로 종료할 수 있습니다. 스레드를 적절하게 종료하는 방법을 이해하는 것은 애플리케이션 안정성과 성능을 보장하는 데 중요합니다. 이 기사에서는 스레드를 중지하고 종료하는 일반적인 방법과 실제 사례를 첨부하여 설명합니다.
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(); // 等待线程终止 } }
输出:
已中断!
不推荐使用 stop() 方法,因为它会立即停止线程,可能导致数据丢失或应用程序不稳定。强烈建议使用 interrupt()
方法代替。
您可以设置一个中断标志,供线程轮询。当该标志设为 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; } }
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!