Thread的Interrupt、isInterrupted、interrupted

线程中断:Interrupt、isInterrupted、interrupted

线程并不是抢占式的,线程是协作式的。

  • Interrupt:声明此线程中断,但是线程并不会立即中断;

  • isInterrupted:判断此线程是否已中断,判断完后不修改线程的中断状态;

  • interrupted:判断此线程是否已中断,判断完后清除线程的中断状态

线程的中断状态默认为( isInterrupted=false 或 interrupted=false ),也就是默认不中断线程

Interrupt理解:

中断线程(isInterrupted=true)

就比如皇上(线程)每晚挑选一个妃子侍寝,到了时间,太监会告诉皇上(线程),时间到了(声明线程中断),皇上(线程)知道了,但是动作停不停还是皇上(线程)说了算,可以不理会,也可以收手。

isInterrupted理解:

判断是否中断线程,如果(isInterrupted=true)则可以控制皇上(线程)收手(停止);皇上(线程)收手(停止)后,线程还是中断状态,也就是(isInterrupted=true);

interrupted理解:

判断是否中断线程,如果(interrupted=true)则可以控制皇上(线程)收手(停止);皇上(线程)收手(停止)后,线程会清楚中断状态,也就是(isInterrupted=false);

测试代码

public class TheadInterrupt {

    //线程继承Thread类
    private static class UserThread extends Thread{
        public UserThread(String name){
            super(name);
        }
        @Override
        public void run() {
            String threadName = Thread.currentThread().getName();
            System.out.println(threadName+"Thread=start=interrupt:"+isInterrupted());
            //测试线程中断
            while (!isInterrupted()){//打开测试isInterrupted
            //while (!interrupted()){//打开测试interrupted
                System.out.println(threadName+"Thread=while=interrupt:"+isInterrupted());
            }
            System.out.println(threadName+"Thread=end=interrupt:"+isInterrupted());
        }
    }

    public static void main(String[] args) throws InterruptedException {
        UserThread userThread = new UserThread("mjtabu");
        userThread.start();
        //线程睡眠 n 毫秒(时间可调)
        userThread.sleep(2);
        //睡眠 n 毫秒后线程中断
        userThread.interrupt();
    }
}

isInterrupted 测试运行结果:

interrupted 测试运行结果:

原文地址:https://www.cnblogs.com/mjtabu/p/12694964.html

时间: 2024-08-29 00:33:30

Thread的Interrupt、isInterrupted、interrupted的相关文章

interrupt, isInterrupted, interrupted

今天学习了java多线程中的终止线程的相关知识, 稍微了解了下用法, 这里记录一下. 1.interrupt 通常情况, 我们不应该使用stop方法来终止线程, 而应该使用interrupt方法来终止线程. 看代码: package com.bao.bao; /** * Created by xinfengyao on 16-3-29. */ public class ThreadDemo1 extends Thread { boolean stop = false; public static

java线程中的interrupt,isInterrupt,interrupted方法

在java的线程Thread类中有三个方法,比较容易混淆,在这里解释一下 (1)interrupt:置线程的中断状态 (2)isInterrupt:线程是否中断 (3)interrupted:返回线程的上次的中断状态,并清除中断状态 举个例子: [java] view plaincopy 用法: class MyThread extends Thread { ...... ...... public void run() { try { while(!Thread.currentThread()

Thread中interrupt()interrupted()和isInterrupted()的区别

在java线程中,线程的状态分为6种.官方文档的解释是:         /**          * Thread state for a thread which has not yet started.          */         NEW,         /**          * Thread state for a runnable thread.  A thread in the runnable          * state is executing in th

interrupt、interrupted 、isInterrupted 区别

       线程中断是一种协作机制,线程可以通过这种机制来通知另一个线程,告诉他在合适的或者可能的情况下停止当前工作,并转而执行其他的工作.       通过中断并不能直接终止另一个线程,而需要被中断的线程自己处理中断. 这好比是家里的父母叮嘱在外的子女要注意身体,但子女是否注意身体,怎么注意身体则完全取决于自己. ‍‍‍‍‍‍‍每一个线程都有一个boolean类型的中断状态.当中断线程时,这个线程的中断状态将被设置为true.‍‍‍‍‍‍‍在Thread中包含了中断线程以及查询线程中断状态的

java 多线程5: java 终止线程及中断机制 (stop()、interrupt() 、interrupted()、isInterrupted())

JAVA中有3种方式可以终止正在运行的线程 ①线程正常退出,即run()方法执行完毕了 ②使用Thread类中的stop()方法强行终止线程.但stop()方法已经过期了,不推荐使用 ③使用中断机制interrupt() 1.stop()方法 stop()在java多线程中已经废弃 1.stop()方法会导致释放锁的不良后果,数据不完整 比如一个上锁了得方法: threadA线程拥有了监视器,这些监视器负责保护某些临界资源,比如说银行的转账的金额.当正在转账过程中,main线程调用 thread

interrupt、interrupted和isInterrupted的区别

1.interrupt() interrupt方法用于中断线程.调用该方法的线程的状态为将被置为"中断"状态. 注意:线程中断仅仅是置线程的中断状态位,不会停止线程.需要用户自己去监视线程的状态为并做处理. 2.interrupted() 和 isInterrupted() public static boolean interrupted () { return currentThread().isInterrupted(true); } public boolean isInter

java 线程基本用法

java中的多线程 一.      java 线程基本介绍 1.进程与线程的区别 进程是指一个内存中运行的应用程序,每个进程都有一块独立的内存空间,一个进程包含一到多个线程. 每个线程都有他所属的进程,每个线程也就是该进程的一条执行路径,线程之间是高频率快速轮换执行的,‘同时’执行只是给人的感觉. 2.Java当中线程一般有5中状态 创建状态:生成线程对象,并没有调用该对象的start方法,这是线程处于创建状态. 就绪状态:当调用了线程的start方法,线程就进入就绪状态,调用start方法后线

Java基础加强之多线程篇(线程创建与终止、互斥、通信、本地变量)

线程创建与终止 线程创建 Thread类与Runnable接口的关系 public interface Runnable { public abstract void run(); } public class Thread implements Runnable { /* What will be run. */ private Runnable target; ...... /** * Causes this thread to begin execution; the Java Virtu

线程中断:Thread类中interrupt()、interrupted()和 isInterrupted()方法详解

首先看看官方说明: interrupt()方法 其作用是中断此线程(此线程不一定是当前线程,而是指调用该方法的Thread实例所代表的线程),但实际上只是给线程设置一个中断标志,线程仍会继续运行. interrupted()方法 作用是测试当前线程是否被中断(检查中断标志),返回一个boolean并清除中断状态,第二次再调用时中断状态已经被清除,将返回一个false. isInterrupted()方法 作用是只测试此线程是否被中断 ,不清除中断状态  下面我们进行测试说明: 定义一个MyThr