import java.util.concurrent.TimeUnit; public class TestInterrupted { public static void main(String[] args) throws Exception { Thread t1 = new Thread(new TestRunner()); Thread t2 = new Thread(new TestRunner2()); //t1.setDaemon(true); t1.start(); t2.start(); TimeUnit.SECONDS.sleep(3); t1.interrupt(); t2.interrupt(); System.out.println("t1.isInterrupted(): "+ t1.isInterrupted()); System.out.println("t2.isInterrupted(): "+ t2.isInterrupted()); } static class TestRunner implements Runnable{ @Override public void run() { while(!Thread.interrupted()){ } } } static class TestRunner2 implements Runnable{ @Override public void run() { while(true){ } } } }
输出:
t1.isInterrupted(): false
t2.isInterrupted(): true
并且程序不会停止。TestRunner2仍然在运行
Thread.interrupted()会清楚中断状态位。
import java.util.concurrent.TimeUnit; public class TestInterrupted { public static void main(String[] args) throws Exception { Thread t1 = new Thread(new TestRunner()); Thread t2 = new Thread(new TestRunner2()); //t1.setDaemon(true); t1.start(); t2.start(); TimeUnit.SECONDS.sleep(3); t1.interrupt(); t2.interrupt(); System.out.println("t1.isAlive(): "+ t1.isAlive()); System.out.println("t2.isAlive(): "+ t2.isAlive()); System.out.println("t1.isInterrupted(): "+ t1.isInterrupted()); System.out.println("t2.isInterrupted(): "+ t2.isInterrupted()); } static class TestRunner implements Runnable{ @Override public void run() { while(!Thread.interrupted()){ } } } static class TestRunner2 implements Runnable{ boolean flag = true; @Override public void run() { while(!Thread.currentThread().isInterrupted()){ //System.out.println(Thread.currentThread().isInterrupted()); } } } }
输出:
t1.isAlive(): false
t2.isAlive(): false
t1.isInterrupted(): false
t2.isInterrupted(): false
我的理解: 线程执行结束后,中断标志位也就被清除了。
import java.util.concurrent.TimeUnit; public class TestInterrupted2 { public static void main(String[] args) throws Exception { Thread t1 = new Thread(new TestRunner()); Thread t2 = new Thread(new TestRunner2()); //t1.setDaemon(true); t1.start(); t2.start(); TimeUnit.SECONDS.sleep(3); t1.interrupt(); t2.interrupt(); System.out.println("t1.isAlive(): "+ t1.isAlive()); System.out.println("t2.isAlive(): "+ t2.isAlive()); TimeUnit.SECONDS.sleep(3); System.out.println("t1.isInterrupted(): "+ t1.isInterrupted()); System.out.println("t2.isInterrupted(): "+ t2.isInterrupted()); } static class TestRunner implements Runnable{ @Override public void run() { while(true){ } } } static class TestRunner2 implements Runnable{ boolean flag = true; @Override public void run() { while(true){ try { TimeUnit.SECONDS.sleep(3); } catch (InterruptedException e) { e.printStackTrace(); } } } } }
输出:
t1.isAlive(): true
t2.isAlive(): true
java.lang.InterruptedException: sleep interrupted
at java.lang.Thread.sleep(Native Method)
at java.lang.Thread.sleep(Thread.java:340)
at java.util.concurrent.TimeUnit.sleep(TimeUnit.java:386)
at TestInterrupted2$TestRunner2.run(TestInterrupted2.java:33)
at java.lang.Thread.run(Thread.java:745)
t1.isInterrupted(): true
t2.isInterrupted(): false
声明抛出InterruptedException的方法会在抛出InterruptedException之前,清除中断状态位。
相关推荐
Java线程中断是一个关键特性,它允许程序员在运行时通知一个线程停止其当前的工作并进行清理。在上述的Java线程中断示例程序中,我们看到一个简单的场景,模拟了一个班级中的学生(student线程)和教师(teacher线程...
### Java线程中断机制详解:`interrupt`与`stop`方法 #### 一、引言 在Java多线程编程中,线程控制是至关重要的技术之一。有时我们需要在特定条件下停止某个线程的执行,或者中断正在等待的线程。Java提供了多种...
Java线程中断是多线程编程中一个关键的概念,它允许一个线程在运行时被其他线程“通知”停止其当前活动。线程中断不是立即终止线程,而是发送一个中断信号,由目标线程自己决定如何响应这个信号。在Java中,线程中断...
以下内容将详细介绍Java线程中断的方法以及相关知识点。 首先,我们需要了解Java中的中断机制是如何工作的。线程中断机制是基于中断标志实现的,当中断线程时,会设置线程的中断状态,线程可以轮询这个状态来决定...
本文将深入探讨Java线程中断的本质以及编程原则。 首先,理解线程中断的本质。Java线程中断并不意味着强制停止一个线程,而是设置了一个中断标志,这个标志是JVM内部维护的。通过`Thread.interrupt()`方法,我们...
Java 中的线程中断是一种线程间的协作模式,通过设置线程的中断标志并不能直接终止该线程的执行,而是被中断的线程根据中断状态自行处理。即“线程中断”并不是字面意思——线程真的中断了,而是设置了中断标志...
Java线程中断机制是Java多线程编程中的一个重要概念,它允许程序在执行过程中通过某种方式通知线程停止其当前的活动,以便进行资源释放或流程控制。在Java中,线程中断主要通过`Thread.interrupt()`方法实现,这个...
书中还可能涉及异常处理和线程中断,`interrupt()`方法用于标记线程中断状态,`isInterrupted()`和`InterruptedException`用于检查和处理中断。中断机制是Java中优雅停止线程的关键。 另外,Java并发工具库(java....
Java线程是并发编程的核心部分,它允许程序在同一时间执行多个独立的任务,从而提高系统效率和响应速度。本文将深入探讨Java线程的概念、生命周期、实现方式以及相关的同步机制。 首先,理解线程的基本概念至关重要...
Java线程是多任务编程的重要概念,它允许程序同时执行多个独立的任务,从而提高系统效率和响应速度。在Java中,线程可以分为用户线程和守护线程,前者是程序运行的基础,而后者是在所有用户线程结束时才终止的后台...
Java线程阻塞中断是Java并发编程中的一个重要概念,它涉及到线程的生命周期管理以及协作。`Thread.interrupt()` 方法是用于向线程发送中断请求,而`LockSupport` 是Java 5引入的一个低级别的线程同步工具,提供了比`...
Java的线程提供了中断机制,通过`Thread.interrupt()`和`Thread.isInterrupted()`方法来控制和检查线程中断状态。在长时间运行的任务中,应定期检查中断标志,一旦检测到中断,及时清理资源并退出。 ```java ...
Java线程是Java编程中的重要概念,特别是在多核处理器和并发处理中不可或缺。Java线程允许程序在同一时间执行多个不同的任务,从而提高了程序的效率和响应性。在燕山大学信息学院计算机系的课程中,李峰教授讲解了...
Java线程有10个优先级(MIN_PRIORITY, NORM_PRIORITY, MAX_PRIORITY),默认优先级是NORM_PRIORITY。但是,线程优先级并不保证绝对的执行顺序,操作系统调度策略可能影响实际执行顺序。 7. join()方法: 一个线程...
Java线程是Java编程语言中的一个核心概念,它允许程序同时执行多个任务,极大地提高了程序的并发性和效率。本教程将深入探讨Java线程的使用,帮助开发者掌握这一关键技术。 一、线程基础 1. **线程的概念**:线程...
9. **线程中断**:通过`interrupt()`方法设置线程的中断标志,线程可以通过检查`isInterrupted()`或`interrupted()`方法来响应中断请求。 10. **线程Local变量**:`ThreadLocal`类为每个线程提供独立的变量副本,...
6. **线程中断与停止**:正确地停止线程是一项挑战,Java提供了interrupt()方法来请求线程中断,但需要注意的是,这并不一定能立即停止线程,需要配合中断标志进行检查和处理。 7. **线程池**:Executor框架和...
本资源"JAVA线程学习(源代码)"提供了关于Java线程的源代码示例,帮助我们深入理解和实践线程的使用。 首先,我们要理解Java中的线程模型。Java线程由`java.lang.Thread`类或`java.util.concurrent.Executor`框架来...
Java线程与并发编程实践是Java开发者必备的技能之一,特别是在多核处理器和高并发应用环境中,有效地管理和利用线程能极大地提升程序的性能。本书《java线程与并发实践编程》由Jeff Friesen撰写,2017年2月出版,...