美文网首页
Java中断

Java中断

作者: lixwcqs | 来源:发表于2019-10-30 20:38 被阅读0次

    背景

    Java线程除非线程本身愿意,否则无法提前终止,为了解决线程提前终止的问题,引入了中断机制。

    线程自能只能自我中断,不能其他线程中断

    流程

    几个方法

    • void interrupt(): 设置中断标志位,通知线程自中断了。若线程处于运行和非中断状态,那么也是仅仅设置一个标志位成true而已。
    • interrupted(): 测试线程的状态位,并重置中断标志(false)
    • boolean isInterrupted() 判断中断标志位。
    import java.time.LocalDateTime;
    import java.time.format.DateTimeFormatter;
    import java.util.concurrent.TimeUnit;
    
    /**
     * @author lixiaowen
     * @date 2019/10/30
     */
    public class Interrupt {
        public static void main(String[] args) {
            Task task = new Task();
            synchronized (Task.class){
                task.start();
                //设置中断状态为true
                task.interrupt();
                try {
                    TimeUnit.SECONDS.sleep(3);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            System.out.println("MAIN 线程释放锁");
        }
    
        static class Task extends Thread {
            public void run() {
                System.out.println("进入循环前:" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
                //synchronize是不可中断的
                synchronized (Task.class){ }
                System.out.println(Thread.currentThread()+ " 获取到锁结束");
                //Thread线程状态为可中断
                while (true){
                    try {
                        //休眠之前/休眠中只要中断标志位为true,均可被中断
                        Thread.sleep(Integer.MAX_VALUE);
                    } catch (InterruptedException e) {
                        //中断结束
                        break;
                    }
                };
                //响应中断之后,中断标志位会被重置
                System.out.println(Thread.currentThread().isInterrupted() + " 循环结束" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
            }
        }
    }
    
    image.png

    相关文章

      网友评论

          本文标题:Java中断

          本文链接:https://www.haomeiwen.com/subject/yaeavctx.html