文档章节

并发编程实战 1.3. 线程的中断 - interrupt()与isInterrupted()

火犀牛
 火犀牛
发布于 2016/05/10 21:44
字数 421
阅读 13
收藏 0

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

范例:打印质数,2秒后结束

方法一:手动控制

package com.rr.concurrent.chapter1.recipe3.test;

/**
 * Created by isaac_gu on 2016/5/10.
 */
public class Task implements Runnable {

    @Override
    public void run() {
        Thread thread = Thread.currentThread();
        int i = 0;
        while (i++ >= 0) {
            if (thread.isInterrupted()) {
                System.out.println("线程被打断了!");
                //return;
                System.exit(0);
            } else if (isPrime(i)) {
                System.out.printf("%d 是 质数\r\n", i);
            }
        }
    }

    /**
     * 百度百科的实现方法
     *
     * @param n
     * @return
     */
    public static boolean isPrime(long n) {
        if (n <= 3) {
            return n > 1;
        }
        if (n % 2 == 0 || n % 3 == 0) {
            return false;
        }

        for (int i = 5; i * i <= n; i += 6) {
            if (n % i == 0 || n % (i + 2) == 0) {
                return false;
            }
        }
        return true;
    }
}

测试:

package com.rr.concurrent.chapter1.recipe3.test;


import java.util.concurrent.TimeUnit;

/**
 * Created by isaac_gu on 2016/5/10.
 * 打印质数,2秒后结束
 */
public class Test {
    public static void main(String[] args) {
        Thread thread = new Thread(new Task());
        thread.start();

        //睡眠2秒
        try {
            TimeUnit.SECONDS.sleep(2);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        //2秒后打断
        thread.interrupt();

    }


}

检查线程是否被中断的方法有两种: isInterrupted() 和 静态方法Thread.interrupted();

方法二: 使用异常

package com.rr.current2.c1_3_interruptException.test;

/**
 * Created by Isaac on 16-5-10.
 */

/**
 * Created by isaac_gu on 2016/5/10.
 */
public class Task implements Runnable {

    @Override
    public void run() {
        try {
            print();
        } catch (InterruptedException e) {
            System.out.printf("%s: 线程被打断了!", Thread.currentThread().getName());
        }
    }

    public void print() throws InterruptedException {
        int i = 0;
        while (i++ >= 0) {
            if(Thread.interrupted()){
                throw new InterruptedException();
            } else if (isPrime(i)) {
                System.out.printf("%d 是 质数\r\n", i);
            }
        }
    }
    /**
     * 百度百科的实现方法
     *
     * @param n
     * @return
     */
    public static boolean isPrime(long n) {
        if (n <= 3) {
            return n > 1;
        }
        if (n % 2 == 0 || n % 3 == 0) {
            return false;
        }

        for (int i = 5; i * i <= n; i += 6) {
            if (n % i == 0 || n % (i + 2) == 0) {
                return false;
            }
        }
        return true;
    }
}

 

© 著作权归作者所有

共有 人打赏支持
火犀牛
粉丝 0
博文 27
码字总数 12180
作品 0
海淀
程序员
私信 提问
Java并发编程原理与实战四:线程如何中断

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

pony1223
2018/07/21
0
0
Java多线程 - 如何正确的终止线程

最近打算读一下《实战java高并发程序设计》,夯实一下java多线程的知识。接下来应该会写一系列的读书笔记,里面会有多处引用到书中的代码或者文字。本文就是第一篇。 不推荐使用的stop方法 Th...

嘉伟咯
2017/08/24
0
0
Java编程的逻辑 -- 并发章 -- 线程的中断

线程中断 线程不同状态对中断的反应 总结 线程中断 在Java中,停止一个线程的主要机制是中断,中断并不是强迫终止一个线程,它是一种协作机制,是给线程传递一个取消信号,但是由线程来决定如...

HikariCP
2018/06/25
0
0
Java并发编程学习一:线程的概念以及使用

该篇文章作为自己并发学习的一个开始,首先介绍一下线程的概念以及使用。 讨论基于单核cpu进行 线程的意义 要了解线程的意义,首先先介绍一下进程,什么是进程?进程概念如下(摘自百度百科)...

JerryLin123
2018/11/10
0
0
多线程编程读书笔记之线程中断的本质

Java试图提供过抢占式限制中断,但问题多多,例如已被废弃的Thread.stop、Thread.suspend和 Thread.resume等。另一方面,出于Java应用代码的健壮性的考虑,降低了编程门槛,减少不清楚底层机...

刘学炜
2012/07/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Linux Wireshark普通用户启动使用方案

当系统安装好Wireshark后请正常启动是否可以进行正常使用,如果不行请参考下列指导 向系统添加一个用户组 sudo groupadd wireshark //如提示此组存在可跳过 将指定用户添加到这个组中 sudo...

CHONGCHEN
今天
1
0
CSS 选择器参考手册

CSS 选择器参考手册 选择器 描述 [attribute] 用于选取带有指定属性的元素。 [attribute=value] 用于选取带有指定属性和值的元素。 [attribute~=value] 用于选取属性值中包含指定词汇的元素。...

Jack088
今天
2
0
数据库篇一

数据库篇 第1章 数据库介绍 1.1 数据库概述  什么是数据库(DB:DataBase) 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据...

stars永恒
今天
4
0
Intellij IDEA中设置了jsp页面,但是在访问页面时却提示404

在Intellij IDEA中设置了spring boot的jsp页面,但是在访问时,却出现404,Not Found,经过查找资料后解决,步骤如下: 在Run/Debug Configurations面板中设置该程序的Working Directory选项...

uknow8692
昨天
4
0
day24:文档第五行增内容|每月1号压缩/etc/目录|过滤文本重复次数多的10个单词|人员分组|

1、在文本文档1.txt里第五行下面增加如下内容;两个方法; # This is a test file.# Test insert line into this file. 分析:给文档后增加内容,可以用sed 来搞定;也可以用while do done...

芬野de博客
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部