java并发中的interrupt

来源:互联网 发布:js 弹出是否 对话框 编辑:程序博客网 时间:2024/05/17 13:41

interrupt用来干嘛
终止被阻塞的任务。当抛出异常或该任务调用Thread.interrupted()时,中断状态将被复位。

阻塞状态
1)调用sleep()进入睡眠状态
2)调用wait()将线程挂起
3)任务在等待某个输入输出的完成
4)任务试图在某个对象上调用其同步控制方法。但是对象锁不可用。因为另外一个任务已经获得这个锁
3)、4)两种情形将不会被中断

简单Demo

public class Interrupted {    public static void main(String[] args) throws InterruptedException {        Thread sleepThread = new Thread(new SleepRunner(), "SleepThread");        sleepThread.setDaemon(true);    Thread busyThread = new Thread(new BusyRunner(), "BusyThread");    busyThread.setDaemon(true);    sleepThread.start();    busyThread.start();    TimeUnit.SECONDS.sleep(5);    sleepThread.interrupt();    busyThread.interrupt();    System.out.println("SleepThread interrupted is " + sleepThread.isInterrupted());    System.out.println("BusyThread interrupted is " + busyThread.isInterrupted());    //防止另外两个线程立即退出    SleepUtils.second(2);}static class SleepRunner implements Runnable {    @Override    public void run() {        while (true) {            SleepUtils.second(10);        }    }}static class BusyRunner implements Runnable {    @Override    public void run() {        while (true) {}    }}

}
那个没有被阻塞的线程不能被打断,并且在抛出异常时重置中断标识位
Thread.interrupt()提供了离开了run()循环而不抛出异常的方法

原创粉丝点击