Thread线程中断相关方法
public class Demo {
/*
* 线程中断相关方法
* ------------------------------------------------------------------------------
* interrupt()
* 中断线程:
* 线程的thread.interrupt()方法是中断线程,将会设置该线程的中断状态位,即设置为true。
* 中断的结果线程是死亡、还是等待新的任务或是继续运行至下一步,就取决于这个程序本身。
* 线程会不时地检测这个中断标示位,以判断线程是否应该被中断(中断标示值是否为true)。它并不像stop()方法那样会中断一个正在运行的线程。
*
* interrupted()(static方法)
* 判断是否是中断状态(会立即清除中断标示位):
* 等同于currentThread().isInterrupted(true);
* 该方法调用后会将中断标示位清除,即重新设置为false
*
* isInterrupted()
* 判断是否是中断状态(不会立刻清除中断标示位):
* 等同于isInterrupted(false);
* 它将线程中断标示位设置为true后,不会立刻清除中断标示位,即不会将中断标设置为false
*
* isInterrupted(boolean ClearInterrupted) (private方法)
* 测试某些线程是否被中断。
* 是否清除中断标示位,基于clearinterrupted是值传递。
* clearinterrupted为true时会立刻清除中断标示位,clearinterrupted为false时不会立刻清除中断标示位。
*
* 多说无益,还是看例子来进行区别吧。
*/
/**
* interrupted()和isInterrupted()的区别
*/
public static void main(String[] args) throws Exception {
// 创建一个线程组
ThreadGroup threadGroup = new ThreadGroup("ThreadGroup1");
// 在该线程组下创建一个线程t1
Thread t1 = new Thread(threadGroup, new Runnable() {
@Override
public void run() {
try {
Thread.sleep(100000); // 100s
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}, "Thread1");
// 启动线程
t1.start();
// 中断线程,会设置该线程的中断状态位为true。
t1.interrupt();
// 例子1,调用两次isInterrupted()方法
// System.out.println(t1.isInterrupted()); // true
// System.out.println(t1.isInterrupted()); // false
/*
* 结论:
* 第一次调用isInterrupted()方法的时候,中断标示位还没有被清除。
* 第二次调用isInterrupted()方法的时候,中断标示位已经被清除了。
*
* isInterrupted()虽然不会【立刻】清除中断标示位,但是还是会清除中断标示位的。关键词:立刻
*/
// 例子2,先调用interrupted()方法,再调用isInterrupted()方法
// System.out.println(t1.interrupted()); // false
// System.out.println(t1.isInterrupted()); // false
/*
* 结论:
* 第一次调用interrupted()方法的时候,中断标示位已经被清除了。
* 所以再调用isInterrupted()方法,返回的仍然是false。
*
* interrupted()会【立刻】清除中断标示位。关键词:立刻
*/
// 例子3,先调用isInterrupted()方法,再调用interrupted()方法
// System.out.println(t1.isInterrupted()); // true
// System.out.println(t1.interrupted()); // false
/*
* 前两个例子已经有结论的。结果是吻合的。
*/
// 例子4,调用两次interrupted()方法
// System.out.println(t1.interrupted()); // false
// System.out.println(t1.interrupted()); // false
/*
* 前两个例子已经有结论的。结果是吻合的。
*/
}
}
Thread线程中断相关方法的更多相关文章
- Thread线程的基础知识及常见疑惑点
引言 相信各位道友在平时工作中已经很少直接用到Thread线程类了,现在大多是通过线程池或者一些多线程框架来操作线程任务,但我觉得还是有必要了解清楚Thread线程类中各种方法的含义,了解了底层才能更 ...
- 线程中断 interrupt 和 LockSupport
本文章将要介绍的内容有以下几点,读者朋友也可先自行思考一下相关问题: 线程中断 interrupt 方法怎么理解,意思就是线程中断了吗?那当前线程还能继续执行吗? 判断线程是否中断的方法有几个,它们之 ...
- boost::thread编程-线程中断(转)
原文转自 http://blog.csdn.net/anda0109/article/details/41943691 thread的成员函数interrupt()允许正在执行的线程被中断,被中断的线 ...
- 线程中断:Thread类中interrupt()、interrupted()和 isInterrupted()方法详解
首先看看官方说明: interrupt()方法 其作用是中断此线程(此线程不一定是当前线程,而是指调用该方法的Thread实例所代表的线程),但实际上只是给线程设置一个中断标志,线程仍会继续运行. i ...
- Thread interrupt() 线程中断的详细说明
GitHub源码地址 原创声明:作者:Arnold.zhao 博客园地址:https://www.cnblogs.com/zh94 一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止 ...
- java并发编程(二)线程中断
参考:http://blog.csdn.net/ns_code/article/details/17091267 使用interrupt()中断线程 当一个线程运行时,另一个线程可以调用对应的Thre ...
- java 线程的终止与线程中断
关于线程终止: 1.一般来讲线程在执行完毕后就会进入死亡状态,那该线程自然就终止了. 2.一些服务端的程序,可能在业务上需要,常驻系统.它本身是一个无穷的循环,用于提供服务.那对于这种线程我们该如何结 ...
- java线程中断和终止线程运行
ava中启动一个线程很容易,通常情况下我们都是等到任务运行结束后让线程自行停止.但有时需要在任务正在运行时取消他们,使得线程快速结束.对此Java并没有提供任何机制.但是我们可以通过Java提供的线程 ...
- Java线程中断的本质深入理解(转)
一.Java中断的现象 首先,看看Thread类里的几个方法: public static boolean interrupted 测试当前线程是否已经中断.线程的中断状态 由该方法清除.换句话说,如 ...
随机推荐
- sklearn CART决策树分类
sklearn CART决策树分类 决策树是一种常用的机器学习方法,可以用于分类和回归.同时,决策树的训练结果非常容易理解,而且对于数据预处理的要求也不是很高. 理论部分 比较经典的决策树是ID3.C ...
- mysql连接查询(A表某字段 like B表字段)
假设有A.B两表 A表中有个字段column_aa B表中有个字段column_bb 如果需要查询出B表中字段column_bb like A表中column_aa字段的纪录,可以使用如下语句 sel ...
- swiper默认显示三个,中间放大且显示全部图片两边显示部分图片的实现方法
本页面内容最后的红色部分有惊喜哦! 最近在做一个活动页面,要求触摸切换图片时,默认在可视区域中显示三张图片,其中中间的一张图片比其他两张都大且全部显示,而其他两张图片只显示部分即可,于是就想到了swi ...
- GMA Round 1 函数求值
传送门 函数求值 设函数$f(x)=x^{2018}+a_{2017}*x^{2017}+a_{2016}*x^{2016}+...+a_{2}*x^2+a_{1}*x+a_{0}$,其中$a_{0} ...
- JDBC(10)—批处理
批量处理JDBC语句,提高处理速度. 当需要成批的的插入或更新记录时可以采用java的批量更新机制,这一机制允许多条语句一次性提交给数据库批量处理,通常情况下比单独提交处理更有效率. 批量处理的方法: ...
- dlib的编译和安装
之前写过python dlib依赖的安装,安装过程还算比较复杂,还需要安装boost.Python依赖等,但是如果纯粹的编译C++的dlib库,则要简单得多,基本上不需要其他外部的依赖,这里简单叙述一 ...
- grid和flex区别
网格容器 VS Flex容器 网格属性 VS Flex属性
- ionic cordova plugin 安装和使用
注意事项 ionic1需要ng-cordova plugin的使用都需要放到deviceready事件的回调中, 设备准备好了才能设备交互 plugin只有在真机上才有效果, 模拟器(部分)和brow ...
- 使用Sphinx编写文档
操作系统 : Windows7_x64 Python 版本 : 2.7.10 Sphinx 版本 : 官方网址:http://sphinx-doc.org github地址: https://gith ...
- linux服务器挂掉自动重启脚本(转)
实现原理主要是使用linux提供的crontab机制,定时查询服务器进程是否存在,如果宕机则执行我们预设的重启脚本. 首先我们要向crontab加入一个新任务 sudo crontab -e #进入编 ...