线程的interrupt()
官网解释
If this thread is blocked in an invocation of the
wait(),wait(long), orwait(long, int)methods of theObjectclass, or of thejoin(),join(long),join(long, int),sleep(long), orsleep(long, int), methods of this class, then its interrupt status will be cleared and it will receive anInterruptedException.
意思是当线程被blocked的时候可以被打断,wait()、sleep()、join()时被打断会抛出InterruptedException异常。
演示sleep()被打断
Thread t1 = new Thread() {
@Override
public void run() {
while (true) {
System.out.println("running...");
try {
Thread.sleep(100L);
} catch (InterruptedException e) {
e.printStackTrace();
break;
}
}
}
};
t1.start();
Thread.sleep(100L);
System.out.println(t1.isInterrupted());
t1.interrupt();
System.out.println(t1.isInterrupted());
在sleep()被打断在异常中要执行break;打断循环,否则该循环一直在执行
演示wait()被打断
package com.dwz.concurrency.chapter6;
public class ThreadInterrupt {
private static final Object MONITOR = new Object();
public static void main(String[] args) throws InterruptedException {
Thread t2 = new Thread() {
@Override
public void run() {
while (true) {
System.out.println("running...");
synchronized (MONITOR) {
try {
MONITOR.wait(100L);
} catch (InterruptedException e) {
System.out.println("收到打断信号。。。");
e.printStackTrace();
break;
}
}
}
}
};
t2.start();
Thread.sleep(100L);
System.out.println(t2.isInterrupted());
t2.interrupt();
System.out.println(t2.isInterrupted());
}
}
1.跟sleep()一样,wait()被打断时在异常中要执行break;打断循环,否则该循环一直在执行
2.wait()的调用者一定是一个对象
演示join()被打断
package com.dwz.concurrency.chapter6;
public class ThreadInterrupt3 {
public static void main(String[] args) throws InterruptedException {
Thread main = Thread.currentThread();
Thread t1 = new Thread() {
@Override
public void run() {
while (true) {
System.out.println(Thread.currentThread().getName());
System.err.println(Thread.currentThread().isInterrupted());
}
}
}; t1.start(); System.out.println("main: " + main.getName());
Thread t2 = new Thread() {
@Override
public void run() {
try {
Thread.sleep(1000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("t2: " + Thread.currentThread().getName());
main.interrupt();
System.out.println("interrupt...");
}
};
t2.start(); try {
t1.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
1.我们要清楚,join的对象是main线程,要想打断 t1.join(), 要在另一个线程中执行 main.interrupt()
2.isInterrupted()表示线程是否被打断,如果只执行 main.interrupt() 方法,意味着 t1.join()被打断
3. t1.join() 一定要在 t1.start() 和 t2.start() 之后被执行。
线程的interrupt()的更多相关文章
- Java 并发:线程中断-interrupt
一直以为执行了interrupt方法就可以让线程结束,并抛出InterruptedException. 今天看了Java并发编程实战的第七章发现并不是这么回事,在这章的开头就提到 要使任务和线程能安全 ...
- java线程的interrupt方法
java现成的interrupt方法比较容易误导新手,它其实是不会中断(停止)当前的线程,只是标志一下当前线程的某个状态值(中断标志位),并且这个状态为只对阻塞方法(比如说: ...
- 线程的Interrupt方法与InterruptedException解析
线程阻塞状态与等待状态(当一个线程处于被阻塞或等待状态时,它暂时不活动,不允许任何代码且消耗最少的资源) 当一个线程试图获得一个内部的对象锁(而不是java.util.concurrent库中的锁), ...
- 线程中断 interrupt 和 LockSupport
本文章将要介绍的内容有以下几点,读者朋友也可先自行思考一下相关问题: 线程中断 interrupt 方法怎么理解,意思就是线程中断了吗?那当前线程还能继续执行吗? 判断线程是否中断的方法有几个,它们之 ...
- 日积月累--线程中断interrupt()方法
线程中断方法interrupt()方法的理解: interrupt()方法的源码: interrupted()方法的源码及注解: isInterrupted()方法源码及注解: 在了解这个方法之前我们 ...
- 【杂谈】线程中断——Interrupt
前言 以前有一个错误的认识,以为中断操作都会抛出异常,后来才发现并不是这样,所以今天就来做一个关于中断的总结. 如何关闭线程 已被弃用的Stop方法 早期,Thread类中有一个stop方法,用于强行 ...
- Java线程停止interrupt()方法
程序是很简易的.然而,在编程人员面前,多线程呈现出了一组新的难题,如果没有被恰当的解决,将导致意外的行为以及细微的.难以发现的错误.在本篇文章中,我们针对这些难题之一:如何中断一个正在运行的线程. 中 ...
- java线程中断[interrupt()函数] (转载)
一个正常的线程中断: 从运行到真正的结束,应该有三个阶段: 正常运行. 处理结束前的工作,也就是准备结束. 结束退出. Java曾经提供过抢占式限制中断,但问题多多,例如的Thread.stop.另一 ...
- java之线程中断——interrupt
如下图所示,interrupt()方法并没有成功的中断我们的线程. 为了便于理解,其实可以这样来类比(注意,只是类比,实际情况并不完全是这样):Thread类中有一个boolean的标志域用来表示线程 ...
随机推荐
- hdu 6082 2017百度之星资格赛
#include<iostream> #include<cstring> #include<cstdio> #include<cmath> #inclu ...
- hdu 6043 KazaQ's Socks
规律题.我自己写的规律对长度为2的要特判,wa一万次... 规律题目,容易错的反而是数据小的时候,得长记性. 题解:规律 先是1~n 然后1~n-2 n-1 1~n-2 n 交替出现 比如当n=4 ...
- Python实现字符的冒泡排序——说实话,两个数兑换的方法震惊了我,一天比一天感受到了Python的强大
import random M= lettList=[] for i in range(M): lettList.append(chr(random.randrange(,))) for lett i ...
- 【原创】大叔经验分享(78)hive查询报错NoViableAltException
Hive或spark中执行sql字符常量包含;时会报错,比如 select instr('abc;abc', ';'); 报错 NoViableAltException(-1@[147:1: sele ...
- 微信Emoji表情代码大全
参考网址 因PC端微信表情包不全,部分表情在PC中有显示问题,手机端微信不存在此问题,或者可以使用文字[微笑]这种方式添加微信表情 含义 标准 DoCoMo KDDI 软银 谷歌 微信 ✂复制这列
- 前端必学TypeScript之第一弹,st基础类型!
TypeScript 是微软开发的 JavaScript 的超集,TypeScript兼容JavaScript,可以载入JavaScript代码然后运行.TypeScript与JavaScript相比 ...
- 阻塞IO和非阻塞IO
1 TCP协议 每一个TCP通信的的socket的内核里面都会有一个发送缓冲区和接收缓冲区 发送端 : send 报文 -- TCP发送缓冲区 -- 接收端 :TCP接收缓冲区 -- receive ...
- Chrome开发者工具中Elements(元素)断点的用途
SAP Engagement Center UI的这个按钮会每秒钟刷新一次,显示页面已经打开了多长时间. 需求:需要找到哪行JavaScript代码不断刷新的按钮文字. 按照经验判断,这个文字肯定是一 ...
- 七:mvc使用CodeFirst(代码优先)创建数据库
1. 理解EF CodeFirst模式特点 2. 使用CodeFirst模式生成数据库 1. CodeFirst模式(代码优先) Code First是Entity Framework提供的一种新的编 ...
- 07_Hive的基本命令_Insert命令
1.将查询结果插入Hive表语法结构: 1.1.基本模式插入: INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol ...