四、interrupt()

interrupt()的作用是中断本线程。
本线程中断自己是被允许的;其它线程调用本线程的interrupt()方法时,会通过checkAccess()检查权限。这有可能抛出SecurityException异常。
如果本线程是处于阻塞状态:调用线程的wait(), wait(long)或wait(long, int)会让它进入等待(阻塞)状态,或者调用线程的join(), join(long), join(long, int), sleep(long), sleep(long, int)也会让它进入阻塞状态。若线程在阻塞状态时,调用了它的interrupt()方法,那么它的“中断状态”会被清除并且会收到一个InterruptedException异常。例如,线程通过wait()进入阻塞状态,此时通过interrupt()中断该线程;调用interrupt()会立即将线程的中断标记设为“true”,但是由于线程处于阻塞状态,所以该“中断标记”会立即被清除为“false”,同时,会产生一个InterruptedException的异常。
如果线程被阻塞在一个Selector选择器中,那么通过interrupt()中断它时;线程的中断标记会被设置为true,并且它会立即从选择操作中返回。
如果不属于前面所说的情况,那么通过interrupt()中断线程时,它的中断标记会被设置为“true”。
中断一个“已终止的线程”不会产生任何操作。

上面网络上给出的解释。

个人理解:interrupt()的作用是中断本线程。当一个线程对象调用interrupt()方法时,会有一个中断标记。如果接下来线程有调用join(),sleep(long),wait()等方法就将抛出InterruptedException异常。如果处于运行状态,那么可以通过调用isInterrupted()来判断是否有中断标记,然后进行下一步操作。

package com.fla.thread;

public class InterruptTest {

    public static void main(String[] args) {
        final A a = new A();
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                a.getB();
            }
        });
        thread.start();
        thread.interrupt();
    }

}
class A {
    boolean flag=true ;

    public synchronized void getA(){
        while(flag){
            try {
                this.wait();
            } catch (InterruptedException e) {
                System.out.println("中断了");
                break;
            }
        }
        System.out.println("xixi");
        flag = false;
    }

    public void getB(){
        for(int i = 0;i<100;i++){
            if((i%10)==0)   //消耗点时间
                System.out.println(i);
        }
        if(Thread.currentThread().isInterrupted()){
            System.out.println("中断");
        }else {
            System.out.println("未中断");
        }
    }
}
时间: 2024-08-26 01:23:12

四、interrupt()的相关文章

JAVA-初步认识-第十四章-多线程-停止线程方式-interrupt

一. 结合上一节继续讲述,不要以为设置了标记线程就能停止,依旧有停不下来的情况. 整个函数就是添加了wait()方法,导致try-catch的加入. DOS结果显示,程序没有停下来,和主线程结束了.其余两个线程都没结束,都处于等待状态. 这两个线程拿到锁进来后,都wait停在这了. 设置标记也没用,因为这两个线程就没读到标记. 有人说采用notify方法,但是notify要在同一个锁中,在这个程序中放不了. 如果程序中不用wait,用sleep呢?而且sleep时间比较长,比如说一个小时,没有一

TI C66x DSP 系统events及其应用 - 5.3(Interrupt)

对于TI C66x DSP的每个CPU有INT4~15共12个中断输入.对于中断,event combiner将INTC的输入event 4~127分为4个组(event 0~3为INTC内部使用,如图示为event combiner的四个输出),然后event 0~127作为Interrupt Selector的输入.类似于4.x中的exception,中断也有同样功能的event flag,event mask,masked event flag寄存器. Interrupt Seclctor

总线接口与计算机通信(四)USB外部总线(初级认识)

USB简介 ? USB是英文Universal?Serial?BUS(通用串行总线)的缩写,是一个外部总线标准,用于规范电脑与外部设备的连接和通讯,是应用在PC领域的接口技术.USB接口支持设备的即插即用和热插拔功能. USB的电气特性 USB连接器包含四条线:2条用于电源供电(VBUS和GND),2条用于USB数据传输(D+和D-).VBUS提供5V电源,电流可达500mA.D+和D-为双向信号线,信号传输速率为12Mbps(每位83ns).D+和D-信号电平为3.3V? USB的特点? 1)

基础知识《四》---Java多线程学习总结

一.线程的基本概念简单的说:线程就是一个程序里不同的执行路径,在同一个时间点上cpu只会有一个线程在执行,Java里的多线程是通过java.lang.Thread类来实现的,每个线程都拥有自己独立的方法栈空间. 二.java线程的创建和启动第一种定义线程类实现Runnable接口:Thread myThread = new Thread(target) //target为Runnable接口类型Runnable中只有一个方法:public void run();用以定义线程运行体第二种可以定义一

linux内核分析第二四学习报告

学生  黎静 课程内容 计算机三大法宝 • 存储程序计算机工作模型,计算机系统最最基础性的逻辑结构: • 函数调用堆栈,高级语言得以运行的基础,只有机器语言和汇编语言的时候堆栈机制对于计算机来说并不那么重要,但有了高级语言及函数,堆栈成为了计算机的基础功能: • 中断,多道程序操作系统的基点,没有中断机制程序只能从头一直运行结束才有可能开始运行其他程序. 一.函数调用堆栈 1.堆栈 堆栈式C语言程序运行时必须的一个记录调用路径和参数的空间.包括: 函数调用框架 传递参数 保存返回地址(如eax)

第十四天、保护模式开启

loader的任务有两个:开启保护模式,将核心 kernel 载入内存.保护模式照抄上次的代码就行, kernel 嘛,先读个文本文件到内存,然后显示出来--检查下效果就行. 常量里加上 kernel.bin 载入内存的段基址 ; Constant.inc ; 常量 ; 四彩 ; 2015-11-17 %ifndef _CONSTANT_INC %define _CONSTANT_INC ; ====================================================

Intel CPU 概览——从8086到四代酷睿i7

现在Intel已然成了CPU的代名词,但当年的Intel并没有现在这么风光.从1978年发布的8086到2013年的四代i7,整整35年,她见证了从PC到互联网.移动互联网的几次巨变:这些年的变化实在太多.本文不打算对这段历史及引领这段历史的风云人物做多少描述和评价(这些内容足够写好几本书的了),你若对这些内容更感兴趣,请移步.本文只对Intel CPU家族中几位名声显赫的人物做简要介绍,并对比他们区别. 简要历史 接下来,对Intel的几个划时代的CPU产品做简要介绍. Intel ? 808

Java多线程(4)----线程的四种状态

与人有生老病死一样,线程也同样要经历开始(等待).运行.挂起和停止四种不同的状态.这四种状态都可以通过Thread类中的方法进行控制.下面给出了Thread类中和这四种状态相关的方法. 1 // 开始线程 2 public void start( ); 3 public void run( ); 4 5 // 挂起和唤醒线程 6 public void resume( ); // 不建议使用 7 public void suspend( ); // 不建议使用 8 public static v

转载 IO、文件、NIO【草案四】

本章目录: 1.IO类相关内容 2.文件和目录 3.文件高级操作  NIO详解[1]——缓冲区(Buffer)[深入理解,总结自<Java-NIO>]: [*:下边的Buffer又指代抽象的缓冲区结构模型,同样代表Java语言里面的Buffer类的实例,这里不区分二者的概念了.] Buffer类基本概念: 一般而言,Buffer的数据结构是一个保存了原始数据的数组,在Java语言里面封装成为一个带引用的对象.Buffer一般称为缓冲区,该缓冲区的优点在于它虽然是一个简单数组,但是它封装了很多数