干货来袭:图解Java多线程(五)

开课吧开课吧锤锤2021-03-16 09:35

    Java编程语言是一种简单、面向对象、分布式、解释型、健壮安全、与系统无关、可移植、高性能、多线程和动态的语言。如今Java已经广泛应用于各个领域的编程开发。

Java

    线程的打断-interrupt()

    //相关方法的定义

    publicvoidinterrupt(){

    }

    publicbooleanisInterrupted(){

    }

    publicstaticbooleaninterrupted(){

    }

    打断标记:线程是否被打断,true表示被打断了,false表示没有

    isInterrupted()获取线程的打断标记,调用后不会修改线程的打断标记

    interrupt()方法用于中断线程

    可以打断sleep,wait,join等显式的抛出InterruptedException方法的线程,但是打断后,线程的打断标记还是false

    打断正常线程,线程不会真正被中断,但是线程的打断标记为true

    interrupted()获取线程的打断标记,调用后清空打断标记即如果获取为true调用后打断标记为false(不常用)

    interrupt实例:有个后台监控线程不停的监控,当外界打断它时,就结束运行。代码如下

    @Slf4j

    classTwoPhaseTerminal{

    //监控线程

    privateThreadmonitor;

    publicvoidstart(){

    monitor=newThread(()->{

    //不停的监控

    while(true){

    Threadthread=Thread.currentThread();

    //判断当前线程是否被打断

    if(thread.isInterrupted()){

    log.info("当前线程被打断,结束运行");

    break;

    }

    try{

    Thread.sleep(1000);

    //监控逻辑中被打断后,打断标记为true

    log.info("监控");

    }catch(InterruptedExceptione){

    //睡眠时被打断时抛出异常在该处捕获到此时打断标记还是false

    //在调用一次中断使得中断标记为true

    thread.interrupt();

    }

    }

    });

    monitor.start();

    }

    publicvoidstop(){

    monitor.interrupt();

    }

    }

    以上内容由开课吧老师猿小布提供,更多Java教程尽在开课吧广场Java教程频道。

有用
分享