这一章节我们来讨论一下线程中断(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)的更多相关文章

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

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

  2. Java并发之线程中断

    前面的几篇文章主要介绍了线程的一些最基本的概念,包括线程的间的冲突及其解决办法,以及线程间的协作机制.本篇主要来学习下Java中对线程中断机制的实现.在我们的程序中经常会有一些不达到目的不会退出的线程 ...

  3. 线程中断 interrupt 和 LockSupport

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

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

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

  5. 日积月累--线程中断interrupt()方法

    线程中断方法interrupt()方法的理解: interrupt()方法的源码: interrupted()方法的源码及注解: isInterrupted()方法源码及注解: 在了解这个方法之前我们 ...

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

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

  7. java之线程中断——interrupt

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

  8. Java多线程之线程中断

    该例子说明,Sleep可以被中断,但是I/O和synchronized不能被中断. package Thread.Interrupting; import java.io.IOException; i ...

  9. java中的线程中断

    线程会根据中断标志位 自行了断自己 https://www.cnblogs.com/yangming1996/p/7612653.html 如何停止线程 1.设置中断标识位 2.sleep时设置中断标 ...

  10. 理解java线程的中断(interrupt)

    一个线程在未正常结束之前, 被强制终止是很危险的事情. 因为它可能带来完全预料不到的严重后果比如会带着自己所持有的锁而永远的休眠,迟迟不归还锁等. 所以你看到Thread.suspend, Threa ...

随机推荐

  1. [luogu 2568] GCD (欧拉函数)

    题目描述 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. 输入输出格式 输入格式: 一个整数N 输出格式: 答案 输入样例#1: 4 输出样例#1: 4 ...

  2. mysql局域网服务搭建

    首先配置电脑Mysql环境变量 新建 Mysql服务配置 CMD >命令 : mysql -u root -p 4. 创建用户 Mysql 用户权限分配 5 重启服务 如果还不能访问就一定是你的 ...

  3. ios 人魔七七

    http://www.cnblogs.com/qiqibo/category/533488.html

  4. 【codeforces 812A】Sagheer and Crossroads

    [题目链接]:http://codeforces.com/contest/812/problem/A [题意] 有一个小箭头指的那个地方; 指的就是人行道路; 然后p[i]指的就是那4个人行道是不是绿 ...

  5. Nginx监控

    http://www.ttlsa.com/nginx/nginx-status-detail/ http://blog.csdn.net/bobpen/article/details/53431699 ...

  6. 极路由4pro(HC5962)设置阿里云DDNS

    v2ex有个帖子说用Dnspod的API可以一行搞定,不过我既然买的是阿里云的域名还是想尽量用阿里云的API,感觉比较安全,另外修改解析记录后也会自动发邮件通知,所以还是调用阿里云的API吧.阿里云的 ...

  7. echarts 柱状图和饼状图动态获取后台数据

    运用echarts来实现图表 1.首先下载echarts包  http://echarts.baidu.com/echarts2/doc/example.html,在这里我下载的是 2.将echart ...

  8. Eclipse下的java工程目录问题和路径问题理解

    1.Eclipse下的java工程都有哪些文件夹? 答:new java project时,会默认创建SRC源代码目录,并默认创建一个bin目录作为输出目录,输出目录是指生成的class文件和配置文件 ...

  9. POJ 2906 数学期望

    开始时直接设了一个状态,dp[i][j]为发现i种bug,j个系统有bug的期望天数.但很错误,没能转移下去.... 看了题解,设状态dp[i][j]为已发现i种bug,j个系统有bug,到完成目标状 ...

  10. Android自己定义组件系列【4】——自己定义ViewGroup实现双側滑动

    在上一篇文章<Android自己定义组件系列[3]--自己定义ViewGroup实现側滑>中实现了仿Facebook和人人网的側滑效果,这一篇我们将接着上一篇来实现双面滑动的效果. 1.布 ...