从头认识java-17.2 线程中断(interrupt)
这一章节我们来讨论一下线程中断(interrupt)。
1.什么是线程中断(interrupt)?
就是在多线程执行的时候,我们给线程贴上一个中断的标记。可是不要求线程终止。
2.样例:
中断的样例:
package com.ray.ch17;
public class Test2 {
public static void main(String[] args) {
PrintA printA = new PrintA();
Thread threadA = new Thread(printA);
threadA.start();
}
}
class PrintA implements Runnable {
private static int i = 0;
@Override
public void run() {
while (!Thread.currentThread().isInterrupted()) {
System.out.println("PrintA");
if (i == 2) {
Thread.currentThread().interrupt();
}
i++;
}
}
}
输出:
PrintA
PrintA
PrintA
不中断的样例:
package com.ray.ch17;
public class Test2 {
public static void main(String[] args) {
PrintB printB = new PrintB();
Thread threadB = new Thread(printB);
threadB.start();
}
}
class PrintB implements Runnable {
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println("PrintB");
Thread.currentThread().interrupt();
}
}
}
输出:
PrintB
PrintB
PrintB
PrintB
PrintB
由上面的两个样例我们能够看出,interrupt仅仅是贴上一个中断的标记,不会强制中断。
3.interrupt与sleep的冲突
由于当使用sleep在interrupt之后使用,sleep将会去掉interrupt这个标记
冲突代码。以下的代码将会无限输出:
package com.ray.ch17;
public class Test2 {
public static void main(String[] args) {
PrintA printA = new PrintA();
Thread threadA = new Thread(printA);
threadA.start();
}
}
class PrintA implements Runnable {
private static int i = 0;
@Override
public void run() {
while (!Thread.currentThread().isInterrupted()) {
System.out.println("PrintA");
if (i == 2) {
Thread.currentThread().interrupt();
try {
Thread.currentThread().sleep(50);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
i++;
}
}
}
总结:这一章节主要介绍线程中断(interrupt)。
这一章节就到这里,谢谢。
-----------------------------------
从头认识java-17.2 线程中断(interrupt)的更多相关文章
- Java 并发:线程中断-interrupt
一直以为执行了interrupt方法就可以让线程结束,并抛出InterruptedException. 今天看了Java并发编程实战的第七章发现并不是这么回事,在这章的开头就提到 要使任务和线程能安全 ...
- Java并发之线程中断
前面的几篇文章主要介绍了线程的一些最基本的概念,包括线程的间的冲突及其解决办法,以及线程间的协作机制.本篇主要来学习下Java中对线程中断机制的实现.在我们的程序中经常会有一些不达到目的不会退出的线程 ...
- 线程中断 interrupt 和 LockSupport
本文章将要介绍的内容有以下几点,读者朋友也可先自行思考一下相关问题: 线程中断 interrupt 方法怎么理解,意思就是线程中断了吗?那当前线程还能继续执行吗? 判断线程是否中断的方法有几个,它们之 ...
- java线程中断[interrupt()函数] (转载)
一个正常的线程中断: 从运行到真正的结束,应该有三个阶段: 正常运行. 处理结束前的工作,也就是准备结束. 结束退出. Java曾经提供过抢占式限制中断,但问题多多,例如的Thread.stop.另一 ...
- 日积月累--线程中断interrupt()方法
线程中断方法interrupt()方法的理解: interrupt()方法的源码: interrupted()方法的源码及注解: isInterrupted()方法源码及注解: 在了解这个方法之前我们 ...
- 【杂谈】线程中断——Interrupt
前言 以前有一个错误的认识,以为中断操作都会抛出异常,后来才发现并不是这样,所以今天就来做一个关于中断的总结. 如何关闭线程 已被弃用的Stop方法 早期,Thread类中有一个stop方法,用于强行 ...
- java之线程中断——interrupt
如下图所示,interrupt()方法并没有成功的中断我们的线程. 为了便于理解,其实可以这样来类比(注意,只是类比,实际情况并不完全是这样):Thread类中有一个boolean的标志域用来表示线程 ...
- Java多线程之线程中断
该例子说明,Sleep可以被中断,但是I/O和synchronized不能被中断. package Thread.Interrupting; import java.io.IOException; i ...
- java中的线程中断
线程会根据中断标志位 自行了断自己 https://www.cnblogs.com/yangming1996/p/7612653.html 如何停止线程 1.设置中断标识位 2.sleep时设置中断标 ...
- 理解java线程的中断(interrupt)
一个线程在未正常结束之前, 被强制终止是很危险的事情. 因为它可能带来完全预料不到的严重后果比如会带着自己所持有的锁而永远的休眠,迟迟不归还锁等. 所以你看到Thread.suspend, Threa ...
随机推荐
- Laravel源码解析之从入口开始
前言 提升能力的方法并非使用更多工具,而是解刨自己所使用的工具.今天我们从Laravel启动的第一步开始讲起. 入口文件 laravel是单入口框架,所有请求必将经过index.php define( ...
- NYIST 749 蚂蚁的难题(八)
蚂蚁的难题(八)时间限制:2000 ms | 内存限制:65535 KB难度:5 描述蚂蚁是一个古玩爱好者,他收藏了很多瓶瓶罐罐. 有一天,他要将他的宝贝们一字排开, 摆放到一个长度为L的展台上. 已 ...
- luogu 1865 数论 线性素数筛法
洛谷 1865 数论 线性素数筛法 最基本的线性素数筛法,当做复习欧拉筛法了,没有尝试过使用更暴力的筛法... WA了一次,手抖没打\n 传送门 (https://www.luogu.org/prob ...
- Nutch2 WebPage 字段解释
Nutch2 WebPage 字段解释 Nutch2.2.1 id
- SQL SERVER-集合操作
内连接 INNER JOIN(等值连接):只显示两个表中联结字段相等的行.这个和用select查询多表是一样的效果,所以很少用到:外连接:LEFT JOIN :以左表为基础,显示左表中的所有 ...
- C#-MSMQ安装及配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...
- jquery访问ashx文件示例
转自原文jquery访问ashx文件示例 .ashx 文件用于写web handler的..ashx文件与.aspx文件类似,可以通过它来调用HttpHandler类,它免去了普通.aspx页面的控件 ...
- HDU 2643
(第二类斯特林数*N的阶乘 )的和. #include <iostream> #include <cstdio> #include <algorithm> #def ...
- 2014百度之星资格赛—— Xor Sum(01字典树)
Xor Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others) Total ...
- web security
brute force cracking 暴力破解 Brute force (also known as brute force cracking) is a trial and error me ...