Thread.interrupt(),就是置状态。
public void run() { //死循环执行打印"I am running!" 和做消耗时间的浮点计算 while (true) { System.out.println("I am running!"); for (int i = 0; i < 900000; i++) { d = d + (Math.PI + Math.E) / d; } try { Thread.sleep(5000); } catch (InterruptedException e) { // TODO Auto-generated catch block System.out.println("**************************** "+Thread.currentThread().isInterrupted()); } //给线程调度器可以切换到其它进程的信号 Thread.yield(); } }
主线程要
//将任务交给一个线程执行 Thread t = new Thread(new ATask()); t.start(); //运行一断时间中断线程 while(true) { Thread.sleep(100); System.out.println("11111111****************************"); System.out.println("Interrupted Thread!"); System.out.println("11111111****************************"); System.out.println("11111**************************** before is interrupted? "+t.isInterrupted()); t.interrupt(); System.out.println("11111**************************** after is interrupted? "+t.isInterrupted()); }
主线程要interrupt次线程的话,那么次线程有普通代码块,就是除去,wait, sleep,join等方法时的普通代码块。由于主次线程时间片切换的问题,那么t.isInterrupted = false, t.interrupt(),可能是时间片没有切换过去,或者切换过去了,但是次线程是普通代码块,然后又切换到主线程,t.isinterrupted= true. 如果时间片切换到
次线程sleep方法,次线程会跑出一个异常,跑到catch块中 了,所以isInterrupted= false.我自己是这么理解
类似linux系统中的信号量。
相关推荐
Thread.interrupt()方法的使用以及使用它退出线程
自.NET 2.0以来,Thread.Suspend()与Thread.Resume()方法已过时,VS提示可以使用如Monitor等技术,但是对于刚接触...相关技术参考:http://msdn.microsoft.com/zh-cn/library/system.threading.thread.interrupt.aspx
`Thread.interrupt` 方法是一个比较安全的替代方案,它会设置线程的中断状态,并且许多阻塞方法(如 `Thread.sleep`, `Object.wait`)在被中断时会抛出 `InterruptedException`,使得线程可以捕获这个异常并进行必要...
Java推荐使用更安全的中断机制,即通过`Thread.interrupt()`方法向线程发送中断信号,然后在线程的run方法中定期检查`isInterrupted()`或`interrupted()`状态来优雅地停止线程。这种方式允许线程清理资源并正常退出...
- Thread.getThreadGroup()获取线程所属的线程组,Thread.interrupt()和Thread.currentThread().interrupted()分别用于中断和检查当前线程是否被中断。 10. **线程的等待/通知机制** - 使用wait()、notify()、...
其次,`Thread.interrupt()`方法的名字可能误导人以为它可以立即中断线程。实际上,`interrupt()`方法并不直接停止线程,而是设置线程的中断状态标志。当线程在某些阻塞操作(如`Thread.sleep()`, `Object.wait()`, ...
线程中断是通过调用`Thread.interrupt()`方法来实现的,它会设置线程的中断标志。当线程正在运行时,这个中断标志通常不会立即导致线程停止,而是作为一种请求,告知线程应该尽快结束。线程需要定期检查中断状态,并...
- `Thread.interrupt()`:标记线程为中断状态,线程可以通过检查`isInterrupted()`或`interrupted()`来响应中断请求。 10. **线程安全的日志和调试**: - 使用适当的日志框架(如Log4j、SLF4J)记录线程信息。 -...
Java线程Thread之interrupt中断解析 Java线程Thread之interrupt中断机制是Java多线程编程中的一种重要机制。通过调用Thread.interrupt()方法,可以设置线程的中断状态位,线程会不时地检测这个中断标示位,以判断...
`Thread.Interrupt`方法用于中断处于`Sleep`、`WaitOne`或`Join`状态的线程。不同于`Abort`,`Interrupt`不会立即终止线程,而是发出一个信号,使线程有机会响应并清理资源。当线程在`Sleep`或`WaitOne`中被中断时...
这个异常的出现并不是错误,而是线程系统向你发出的一个信号,表明线程的中断状态已被改变,可能是其他线程通过调用`Thread.interrupt()`请求当前线程停止执行。 `InterruptedException`的存在是为了支持可取消的...
public class ThreadInterrupt extends Thread { public void run() { try { Thread.sleep(50000); } catch (InterruptedException e) { System.out.println(e.getMessage()); } } // ... } ``` 在这个...
首先,`TestThread_interrupt.java`是主程序,它创建了一个`ClassRoom`对象,并启动了两个线程。`ClassRoom`类实现了`Runnable`接口,这意味着它包含一个`run()`方法,该方法将在线程中执行。 在`ClassRoom`的`run...
在Java中,线程中断主要通过`Thread.interrupt()`方法实现,这个方法会设置线程的中断状态标志。下面将详细阐述Java线程中断机制的各个方面。 1. **线程中断状态** Java中的线程中断状态是一种标志,由`Thread....
`Thread.interrupt()`用于中断一个线程。如果线程正在阻塞(如在`sleep()`或`wait()`),这个方法将抛出`InterruptedException`,线程可以捕获这个异常来响应中断请求。 7. **join()方法**: `Thread.join()`让...
public class ThreadInterrupt extends Thread { public void run() { try { Thread.sleep(50000); // 延迟 50 秒 } catch (InterruptedException e) { System.out.println(e.getMessage()); } } public ...
Thread.currentThread().interrupt(); // 重新设置中断状态 System.out.println("被中断"); } ``` #### 三、`interrupt()`方法的工作原理 当我们调用`thread.interrupt()`时,Java虚拟机会执行以下步骤: 1. ...
- `Thread.interrupt()`方法主要在线程被阻塞时发挥作用,如`Object.wait()`, `Thread.join()`, 或者`Thread.sleep()`。这些方法会抛出`InterruptedException`,使得线程能从阻塞状态中退出。 - 如果线程未被阻塞...