文档章节

线程的中断

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

如果一个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()方法。

© 著作权归作者所有

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

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

蜡笔小小小新
2016/04/24
87
0
Java并发编程原理与实战四:线程如何中断

如果你使用过杀毒软件,可能会发现全盘杀毒太耗时间了,这时你如果点击取消杀毒按钮,那么此时你正在中断一个运行的线程。 java为我们提供了一种调用interrupt()方法来请求终止线程的方法,下...

pony1223
07/21
0
0
JAVA Thread的中断机制(interrupt)

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

北极心
2015/11/20
0
0
Java并发编程的艺术(五)——中断

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34173549/article/details/79612424 什么是中断? 在Java中没有办法立即停止一条线程,然而停止线程却显得...

追风筝的猪
03/19
0
0
java 线程isInterrupted 和 interrupted的区别和联系

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

zheng_pat
2015/06/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

deepin中配置robot framework环境

本文永久更新地址:https://my.oschina.net/bysu/blog/2989005 【若要到岸,请摇船:开源中国 不最醉不龟归】 1.在终端中输入pip,回车,如果提示没有该命令,则先安转pip sudo apt-get inst...

不最醉不龟归
41分钟前
3
0
OSChina 周日乱弹 —— 钱不还,我就当你人不在了

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子 :分享Bigleaf的单曲《小鹿》 《小鹿》- Bigleaf 手机党少年们想听歌,请使劲儿戳(这里) 周日在家做什么? 做手工呀, @poorfis...

小小编辑
今天
125
4
EOS docker开发环境

使用eos docker镜像是部署本地EOS开发环境的最轻松愉快的方法。使用官方提供的eos docker镜像,你可以快速建立一个eos开发环境,可以迅速启动开发节点和钱包服务器、创建账户、编写智能合约....

汇智网教程
今天
21
0
《唐史原来超有趣》的读后感优秀范文3700字

《唐史原来超有趣》的读后感优秀范文3700字: 作者:花若离。我今天分享的内容《唐史原来超有趣》这本书的读后感,我将这本书看了一遍之后就束之高阁了,不过里面的内容一直在在脑海中回放,...

原创小博客
今天
30
0
IC-CAD Methodology知识图谱

CAD (Computer Aided Design),计算机辅助设计,指利用计算机及其图形设备帮助设计人员进行设计工作,这个定义同样可以用来近似描述IC公司CAD工程师这个岗位的工作。 早期IC公司的CAD岗位最初...

李艳青1987
今天
40
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部