美文网首页
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线程中断

    本文主要介绍Java线程中断一些相关的概念以及注意点 Java线程的中断并不是强制的中断,调用线程中断的方法时只是...

  • java中断

    转载csdn文章https://blog.csdn.net/qpc908694753/article/detail...

  • Java中断

    关闭线程 Java 中如何关闭一个线程,已经废弃的方法Thread.stop()会造成不可预知的bug,官方说明 ...

  • Java中断

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

  • java 中断

    JAVA多线程之中断机制(如何处理中断?)https://blog.csdn.net/pange1991/arti...

  • Java中断

    概述 Java的中断和操作系统的中断是两个层面的概念, 没有任何语言方面的需求一个被中断的线程应该终止。中断一个线...

  • 【多线程】——3.线程的中断

    线程中断的概念 java线程中断是一种协作机制 通过中断并不能直接终止线程的运行 需要被中断的线程自己处理中断 (...

  • Java线程中断

    首先,一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止。所以,Thread.stop, Thr...

  • Java中断机制

    引言 Java中断机制为我们提供了一种"试图"停止一个线程的方法。设想我们有一个线程阻塞在一个耗时的I/O中,我们...

  • Java 线程中断

    1. 中断线程 public void interrupt()停止一个线程,但不会终止一个正在运行的,还需要加入一...

网友评论

      本文标题:Java中断

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