线程中断方法interrupt()方法的理解:

interrupt()方法的源码

interrupted()方法的源码及注解:

isInterrupted()方法源码及注解:

在了解这个方法之前我们需要了解何为中断(interrupt):

1、中断只是一种协作机制,Java没有给中断增加任何语法,中断的过程完全需要程序员自己实现

2、每个线程对象中都有一个标识,用于表示线程是否被中断;该标识位为true表示中断,为false表示未中断;

3、通过调用线程对象的interrupt方法将该线程的标识位设为true;可以在别的线程中调用,也可以在自己的线程中调用。

interrupt()方法:中断this线程(哪个线程对象调用即中断谁)。如果这个需要被中断线程处于阻塞状态(sleep、wait、join),那么它的中断状态就会被清除,并且抛出异常(InterruptedException)。这个中断并非真正的停止掉线程,而是将它的中断状态设置成“停止”的状态,线程还是会继续运行,至于怎么停止掉该线程,还是要靠我们自己去停止,该方法只是将线程的状态设置成“停止”的状态,即true。接着往下看就会明了的。

interrupted()方法:检查当前线程是否被中断,与上面的interrupt()方法配合一起用。线程的中断状态将会被这个方法清除,也就是说:如果这个方法被连续成功调用两次,第二次

调用将会返回false(除非当前线程在第一次调用之后和第二次调用之前又被中断了);

isInterrupted()方法:检查线程的中断状态(哪个线程对象调用就检查谁的),并且线程的中断状态不会受该方法的影响

下面我们来用个示例展示:

创建MyThread类:

创建Test1类:

运行结果:

运行结果为什么是两个false?上面介绍了interrupted方法是检测当前线程的中断状态,当前线程是main线程,main线程的中断状态并没有设置成true,所以都是false。

那么如果我们使main线程中断了?创建Test2类:

运行结果:

在第一次调用interrupted()方法后,返回true,但是当前线程的中断状态就被清除了(变为false了),所以第二次中断状态就是false。isInterrupted()方法只会返回当前线程的

中断状态,没有清除的功能。

那如何使线程真正的停止了?下次再写。。。

日积月累--线程中断interrupt()方法的更多相关文章

  1. 线程中断 interrupt 和 LockSupport

    本文章将要介绍的内容有以下几点,读者朋友也可先自行思考一下相关问题: 线程中断 interrupt 方法怎么理解,意思就是线程中断了吗?那当前线程还能继续执行吗? 判断线程是否中断的方法有几个,它们之 ...

  2. Java 并发:线程中断-interrupt

    一直以为执行了interrupt方法就可以让线程结束,并抛出InterruptedException. 今天看了Java并发编程实战的第七章发现并不是这么回事,在这章的开头就提到 要使任务和线程能安全 ...

  3. 线程的Interrupt方法与InterruptedException解析

    线程阻塞状态与等待状态(当一个线程处于被阻塞或等待状态时,它暂时不活动,不允许任何代码且消耗最少的资源) 当一个线程试图获得一个内部的对象锁(而不是java.util.concurrent库中的锁), ...

  4. 【杂谈】线程中断——Interrupt

    前言 以前有一个错误的认识,以为中断操作都会抛出异常,后来才发现并不是这样,所以今天就来做一个关于中断的总结. 如何关闭线程 已被弃用的Stop方法 早期,Thread类中有一个stop方法,用于强行 ...

  5. Java线程停止interrupt()方法

    程序是很简易的.然而,在编程人员面前,多线程呈现出了一组新的难题,如果没有被恰当的解决,将导致意外的行为以及细微的.难以发现的错误.在本篇文章中,我们针对这些难题之一:如何中断一个正在运行的线程. 中 ...

  6. java线程的interrupt方法

    java现成的interrupt方法比较容易误导新手,它其实是不会中断(停止)当前的线程,只是标志一下当前线程的某个状态值(中断标志位),并且这个状态为只对阻塞方法(比如说:             ...

  7. java线程中断[interrupt()函数] (转载)

    一个正常的线程中断: 从运行到真正的结束,应该有三个阶段: 正常运行. 处理结束前的工作,也就是准备结束. 结束退出. Java曾经提供过抢占式限制中断,但问题多多,例如的Thread.stop.另一 ...

  8. java之线程中断——interrupt

    如下图所示,interrupt()方法并没有成功的中断我们的线程. 为了便于理解,其实可以这样来类比(注意,只是类比,实际情况并不完全是这样):Thread类中有一个boolean的标志域用来表示线程 ...

  9. java线程基础巩固---Thread中断Interrupt方法学习&采用优雅的方式结束线程生命周期

    Interrupt学习: 在jdk中关于interrupt相关方法有三个,如下: 关于上面的疑问会在稍后进行阐述滴,下面看代码: 编译运行: 应该说是t线程为啥在被打断之后没有退出,还是在运行状态,这 ...

随机推荐

  1. element-UI——el-table添加序号

    转载自:https://www.cnblogs.com/langxiyu/p/10641060.html Part.1 示例 当我们想在 el-table 中添加序号列时,如下: <el-tab ...

  2. C#_计算目前时间到指定的周X、指定的时间X 还有多少秒

    比如:当前时间到下周二 05:00:00还剩下多少秒? /// <summary> /// 计算距离下一个 周XX XX时XX分XX秒,还剩下多少秒 /// </summary> ...

  3. python ssh登录linux 上传和下载文件

    #!usr/bin/python# coding: utf-8 import paramikoimport jsonremotedir='/tmp/log'remotefile = 'bst_mana ...

  4. 解决JS中取URL地址中的参数中文乱码

    GET请求会将中文编码,如果取出乱码的话,应该进行解码操作, 下面的函数是获取指定参数名的参数值,参数值可是中文.英文. function getQueryString(name) { var reg ...

  5. 小程序input组件获得焦点时placeholder内容有重影

    这个问题是小程序input组件的bug,目前的解决办法可以,在input标签上加一个其他标签,显示placeholder内容,获得焦点时消失,失去焦点时候再让其显示 <view class='i ...

  6. C++标准模板库(STL)之Map

    1.Map的常用用法 map:映射.可以将任何基本类型,结构体,STL容器映射到任何基本类型包括容器. 使用map,需要加map的头文件,#include<map>和using names ...

  7. 语音识别ASR - HTK(HResults)计算字错率WER、句错率SER

    HResults计算字错率(WER).句错率(SER) 前言 好久没发文,看到仍有这么多关注的小伙伴,觉得不发篇文对不住.确实好久没有输出经验总结相关的文档,抽了个时间,整理了下笔记,发一篇关于ASR ...

  8. 设计模式之Factory模式(C++)

    Factory模式具有两大重要的功能: (1).定义创建对象的接口,封装了对象的创建: (2).使具体化类工作延迟到了子类中. //Product.h #ifndef _PRODUCT_H_ #def ...

  9. javascript 判断质数

    1.判断n是否为number类型,是否为整数,是否小于2: 2.若n == 2返回true: 3.从3至n的算术平方根(square)之间的奇数,如果n取余为0,则不是奇数. var isPrime ...

  10. textarea右下角黑点

    先记录问题及解决方法,原因后续深入了解 在布局中,用到了textarea 输入框,在Android手机上却显示右下角有一个黑点,检查代码无误,代码没有多余的点符号. 解决:在textarea 中添加 ...