java多线程

多线程之理解Interrupt

2019-11-10  本文已影响0人  初夏时的猫

在学习多线程时,多多少少会看一些源码,其中interrupt经常出现,于是看了很多博客学习了一下interrupt,并对interrupt做一下总结。
interrupt:中断。
线程分为几种状态:新建,就绪,运行,堵塞,死亡。
java.lang.Thread中关于interrupt的三个方法:

private native boolean isInterrupted(boolean ClearInterrupted);
public boolean isInterrupted() {
        return isInterrupted(false);
    }
public static boolean interrupted() {
        return currentThread().isInterrupted(true);
    }
    public void interrupt() {
        if (this != Thread.currentThread())
            checkAccess();

        synchronized (blockerLock) {
            Interruptible b = blocker;
            if (b != null) {
                interrupt0();           // Just to set the interrupt flag
                b.interrupt(this);
                return;
            }
        }
        interrupt0();
    }

1.interrupt:给当前线程设置中断标记(只是一个标记,需要自己写逻辑中断线程)。
2.interrupted:如果线程有中断标记则清除并返回true,否则false。
3.isinterrupted:如果线程有中断标记返回true,否则返回false。
注:interrupted方法内部return的是currentThread而不是调用方法的线程
下面举个例子

class Runner implements Runnable{

    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println(i);
            if (Thread.currentThread().isInterrupted()){
                System.out.println("第一次"+Thread.interrupted());
                System.out.println("第二次"+Thread.interrupted());
                break;
            }

        }
    }
}
public class Test {
    public static void main(String[] args) {
        Thread t1 = new Thread(new Runner(),"A");;
        t1.start();
        t1.interrupt();;
    }
}

运行结果


图片.png
上一篇下一篇

猜你喜欢

热点阅读