interrupt()方法仅仅是通知线程,线程有机会执行一些后续操作,同时也可以无视这个通知。被interrupt的线程,有两种方式接收通知:一种是异常, 另一种是主动检测。 通过异常接收通知 当线程A处于WAITING、 TIMED_WAITING状态时, 如果其他线程调用线程A的interrupt()方法,则会使线程A返回到RUNNABLE状态,同时线程A的代码会触发...
响应中断:线程可以通过Thread.interrupted()或isInterrupted()方法检测中断状态。 使用方法 基本使用 以下是使用Thread.interrupt()的基本步骤: 创建并启动线程。 在某个时间点,调用interrupt()请求线程中断。 在线程内部定期检查中断状态,并决定是否结束线程。 publicclassInterruptExample{publicstaticvoidmain(String[] arg...
Thread.sleep( 3000 ); System.out.println( "Interrupting thread..." ); thread.interrupt(); System.out.println("线程是否中断:" + thread.isInterrupted()); Thread.sleep( 3000 ); System.out.println("Stopping application..." ); } public void run() { while(!stop){ System.out.println( "M...
在第一种情况下使用interrupt方法,sleep方法将抛出一个InterruptedException例外,而在第二种情况下线程将直接退出。下面的代码演示了在第一种情况下使用interrupt方法。 ThreadInterrupt.java 文件 publicclassThreadInterruptextendsThread{publicvoidrun(){try{sleep(50000);//延迟50秒}catch(InterruptedExceptione){System.out...
因此,在这里强烈建议大家不要再用stop方法去停止线程了! 如何优雅的停止一个线程 我们知道线程只有从 runnable 状态(可运行/运行状态) 才能进入terminated 状态(终止状态),如果线程处于 blocked、waiting、timed_waiting 状态(休眠状态),就需要通过 Thread 类的 interrupt() 方法,让线程从休眠状态进入 runnable 状态,从...
public class InterruptThreadTest { public static void main(String[] args) { Thread t = new Thread(new Runnable() { @Override public void run() { while (true) { System.out.println(Thread.currentThread().getName() + "正在检测心跳"); ...
针对上述情况,我们不能直接将线程给终止掉,但有时又必须将让线程停止运行某些代码,那么此时我们必须有一种机制让线程知道它该停止了。Java 为我们提供了一个比较优雅的做法,即可以通过Thread#interrupt()给线程该线程一个标志位,让该线程自己决定该怎么办。
interrupt()方法是成员方法; 通常不能在线程内部调用线程的interrupt()方法来中断线程自己; 如果线程正阻塞在Object#wait,Object.wait(long),Object.wait(long, int),Thread#join,Thread.join(long),Thread.join(long, int),Thread.sleep(long)或Thread.sleep(long, int)方法上,然后被interrupt()方法中断,此时中断...
stop(): 暴力停止线程。已弃用。 二、停止线程方法1:异常法停止 线程调用interrupt()方法后,在线程的run方法中判断当前对象的interrupted()状态,如果是中断状态则抛出异常,达到中断线程的效果。 如下示例: MyThread.java public class MyThread extends Thread { ...
使用interrupt 来通知线程停止运行,而不是强制停止! 普通情况停止线程 AI检测代码解析 public class RightWayStopThreadWithoutSleep implements Runnable { @Override public void run() { int num = 0; while (!Thread.currentThread().isInterrupted() && num <= Integer.MAX_VALUE / 2) { ...