线程中断方法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. java中的默认类型+spring

    默认引用类型 Integer Character String(包装类)... private Integer age  ; 默认是null 默认基本类型 int char string.privit ...

  2. ElasticSearch改造研报查询实践

    背景: 1,系统简介:通过人工解读研报然后获取并录入研报分类及摘要等信息,系统通过摘要等信息来获得该研报的URI 2,现有实现:老系统使用MSSQL存储摘要等信息,并将不同的关键字分解为不同字段来提供 ...

  3. linux文件名乱码解决

    问题描述:公司的FTP服务器早就搭建好,windows客户端可以上传文件到FTP服务器,但是上传去的文件在LINUX目录下文件是乱码. 解决方法:首先编辑/etc/sysconfig/i18n这个文件 ...

  4. windows下载mysql5.7压缩包配置安装mysql

    windows安装mysql5.7有两种方式 1.下载.msi安装文件直接根据界面提示进行安装 2.下载.biz或.zip压缩包 注:本次在win10系统下使用压缩包进行安装mysql5.7 mysq ...

  5. C# 数组,对象实例化并赋值

    [数组] 数组实例化,并赋值时,可以省略new[]. ]; --未赋值 ,}; --赋值 [对象] 对象实例化,并赋值时,可以省略(). class test { public string name ...

  6. async-await用法

    转载:https://segmentfault.com/a/1190000011526612?utm_source=tag-newest

  7. java中JScrollPane不显示水平滚动条的解决办法

    在JPanel中添加了表格,表格中对东西太多,需要水平滚动条滑动才能够完全找到所有数据,如果没有水平滚动条的话,数据堆积在一起,无法分开 做法是: 第一步:先将表格自动调整的状态给关闭掉:table. ...

  8. div+css的常规使用

    代码如下 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3 ...

  9. 浏览器与WEB服务器交互

    问题:打开浏览器,在地址栏输入url到页面展现,整个过程发生了什么? 图示: 步骤: 1 用户输入网址,包括协议和域名. 2 浏览器先查找自身缓存有没有记录,没有的话再找操作系统缓存. 3 当浏览器在 ...

  10. socket应用(vue、node.js、M站)

    socket应用(vue.node.js.M站) 前言:我们在做一些项目的时候需要做到实时变化, 比如我们有时候有需求会要求我们做一个类似于聊天室的页面 比如有些时候我们对某些东西进行点赞和刷票,需要 ...