文档章节

线程的中断

柳哥
 柳哥
发布于 2015/04/18 22:44
字数 424
阅读 167
收藏 3
点赞 0
评论 0

如果一个Java程序有不止一个执行线程,当所有线程都运行结束的时候,这个Java程序才能运行结束;更确切地说应该是所有的非守护线程运行结束时,或者其中一个线程调用了System.exit()方法时,这个Java程序才运行结束。

Java提供了中断机制,我们可以使用它来结束一个线程。这种机制要求线程检查它是否被中断了,然后决定是不是响应这个中断请求。线程允许忽略中断请求并且继续执行。

package concurrency;

public class Generator2 extends Thread {
    public static void main(String[] args) {
        Thread task = new Generator2();
        task.start();
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        //中断线程
        task.interrupt();
    }
    @Override
    public void run() {
        long number = 1L;
        while(true){
            if(isPrime(number)){
                System.out.printf("Number %d is Prime\n", number);
            }
            //判断是否被中断
            if(isInterrupted()){
                System.out.printf("The Prime Generator2 has been Interrupted");
                return;
            }
            number++;
        }
    }
    //如果接收到的参数是一个质数就返回true
    private boolean isPrime(long number){
        if(number <= 2){
            return true;
        }
        for(long i = 2; i < number; i++){
            if(number % i == 0){
                return false;
            }
        }
        return true;
    }
}

Thread类有一个表明线程被中断与否的属性,它存放的是布尔值。线程的interrupt()方法被调用时,这个属性就会被设置为true。isInterrupted()方法只是返回这个属性的值。

还有一个方法可以检查线程是否被中断,即Thread类的静态方法interrupted()用来检查当前执行的线程是否被中断。isInterrupted()和interrupted()方法有一个很大的区别。isInterrupted()不能改变interrupted属性的值,但是后者能设置interrupted属性为false。因为interrupted()是一个静态方法,更推荐使用isInterrupted()方法。

© 著作权归作者所有

共有 人打赏支持
柳哥
粉丝 203
博文 405
码字总数 347782
作品 0
杭州
技术主管
java线程中断处理

在java多线程编程中,java病没有提供一种比较完全的中断一个线程的方法,而是提供一种基于协作的中断机制,也就是通过中断不能直接终止一个线程,而是被中断的线程自己选择何时处理这个中断,...

蜡笔小小小新
2016/04/24
87
0
JAVA多线程10-基础篇-线程终止

本节摘要: 介绍线程中断的原理、阻塞方法以及代码示例 一、为什么需要中断 有哪些场景我们需要中断线程?通常有以下几点: 我们希望在指定的时间内完成任务,但是任务执行时间太久,例如调用...

x_coder
2017/11/01
0
0
interrupt、interrupted和isInterrupted的区别

1.interrupt() interrupt方法用于中断线程。调用该方法的线程的状态为将被置为"中断"状态。 注意:线程中断仅仅是改变线程的中断状态位,不会停止线程。需要用户自己去监视线程的状态位并做出...

激情的狼王丶21
2017/12/19
0
0
JAVA Thread的中断机制(interrupt)

Thread的中断机制(interrupt) 中断线程 线程的thread.interrupt()方法是中断线程,将会设置该线程的中断状态位,即设置为true,中断的结果线程是死亡、还是等待新的任务或是继续运行至下一步...

北极心
2015/11/20
0
0
关于interrupt

Thread类中有这么几个方法: public void interrupt() public static boolean interrupted() public boolean isInterrupted() interrupt() 中断线程。 如果当前线程没有中断自己(这在任何情...

牧师-Panda
2016/09/07
6
0
Thread类的interrupt(),interrupted(),isInterrupted()

sleep() & interrupt() 线程A正在使用sleep()暂停着: Thread.sleep(100000); 如果要取消他的等待状态,可以在正在执行的线程里(比如这里是B)调用 a.interrupt(); 令线程A放弃睡眠操作,这里a是...

colorlesswind
2016/08/25
19
0
多线程程序设计学习(11)Two-phapse-Termination pattern

Two-phapse-Termination[A终止B线程] 一:Two-phapse-Termination的参与者 --->A线程 --->B线程 二:Two-phapse-Termination模式什么时候使用 --->当A线程需要B线程终止时 三:Two-phapse-Term......

无信不立
2015/08/01
0
0
Thread线程终止interrupt

interrupt()的字面意思是中断一个线程,那么它是怎么使用来达到中断当前线程的呢?我们来看几个例子。 一、终止处于“阻塞状态”的线程 通过中断方式终止处于阻塞状态的线程,当线程由于被调...

激情的狼王丶21
2017/12/19
0
0
任务&&线程的取消与关闭机制_中断

任务&&线程的取消与关闭机制_中断 任务和线程的启动很容易。但要使任务和线程能安全、快速、可靠地停止下来,并不是一件容易的事。Java没有提供任何机制来安全地终止线程。但它提供了中断(I...

秋风醉了
2014/08/11
0
0
Java并发编程(2):线程中断

使用interrupt()中断线程 当一个线程运行时,另一个线程可以调用对应的Thread对象的interrupt()方法来中断它,该方法只是在目标线程中设置一个标志,表示它已经被中断,并立即返回。这里...

余平的余_余平的平
2017/09/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

TensorFlow 线性分类

构造直线 z = 2 * x - 3 * y + 4 x0*w0+x1*w1+b=0 x1=-x0* w0/w1-b/w1 斜率 k= -w0/w1 截距 -b/w1 随机生成数据,加入一定的偏差,用直线将二维平面分为两部分 使用线性模型拟合参数 损失函数...

阿豪boy
8分钟前
0
0
翻译冒泡排序测试

翻译一个冒泡排序: var a = [1,3,2,4,6,5];var f = 0;var n = a.length ;for( var i =1; i<= n; i++) { for( var j = n-1 ; j >= i; j --) { if(a[j] < a[j+1]) { ......

钟元OSS
9分钟前
0
0
maven父、子级版本号同时修改

命令: mvn versions:set -DnewVersion=0.0.2-SNAPSHOT

沉默的懒猫
11分钟前
0
0
Spring boot中的异常处理之注解响应

Controller层 return patientRepository.findById(id) .orElseThrow(() -> new NotFoundException(String.format("Patient %d not found", id))); Exception类 @ResponseS......

亚林瓜子
12分钟前
0
0
webpack文档翻译_001

概念 webpack是一个为现代JavaScript应用的打包工具(a static module bundler)。 当webpack处理应用时,在其内部,会生成一个依赖图(dependency graph),这个依赖图可以映射到项目里的每一个...

DennisHill
12分钟前
5
0
vim 行首/行尾 批量操作

批量插入 行首插入 :%s/^/your_word/ 行尾插入:%s/$/your_word/ 按键操作 注释:ctrl+v 进入列编辑模式,向下或向上移动光标,把需要注释的行的开头标记起来,然后按大写的I(shift + i),再插入...

温子寒
13分钟前
0
0
Java语言学习(十二):多线程

Java中给多线程编程提供了内置的支持,多线程是多任务的一种特别形式,它使用了更小的资源开销。这里需要知道两个术语及其关系:进程和线程。 进程:进程是系统进行资源分配和调度的一个独立...

海岸线的曙光
19分钟前
0
0
mysql源码阅读相关文章

https://www.jianshu.com/p/e739afb8fe31

writeademo
32分钟前
0
0
CentOS7 安装MySQL8

1. 从官网拿到本地YUM源的安装包,并安装本地YUM源 2. 通过`yum install -y`命令进行MySQL的安装 3. 启动服务,并配置开机自启 4. 获取初始化密码,登录MySQL 5. 修改密码策略,然后自行设置roo...

小致dad
38分钟前
0
0
史上最简单的 IntelliJ IDEA 教程

我不是作者,我只是内容的搬运工。 传送门

颖辉小居
40分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部