java中interruptor理解与使用

一、JMM模型与volatile详解
二、synchronized原理详解
三、AQS框架详解——AbstractQueuedSynchronizer
四、ArrayBlockingQueue、LinkedBlockingQueue、PriorityBlockingQueue和DelayQueue学习总结
五、CountDownLatch、CyclicBarrier和Semaphore的比较
java中interruptor理解与使用
Java线程的6种状态及切换
MESI协议:保证可见性,无法保证原子性

中断是通过调用Thread.interrupt()方法来做的. 这个方法通过修改了被调用线程的中断状态来告知那个线程,说它被中断了. 对于非阻塞中的线程, 只是改变了中断状态, 即Thread.isInterrupted()将返回true;对于可取消的阻塞状态中的线程, 比如等待在这些函数上的线程,Thread.sleep(), Object.wait(), Thread.join(), 这个线程收到中断信号后, 会抛出InterruptedException, 同时会把中断状态置回为true.但调Thread.interrupted()会对中断状态进行复位。

代码实例

package com.并发专题.中断;

/**
 * @author 
 * @date 2020/9/27
 *
 */
public class TestInterruptor1 extends Thread{
    public static void main(String args[]) throws Exception {
        TestInterruptor1 thread = new TestInterruptor1();

        System.out.println("Starting thread...");
        thread.start();
        System.out.println("====1===="+thread.getState());

        //主线程休息30s
        Thread.sleep(3000);

        System.out.println("Asking thread to stop...");

        /*
         * 如果线程阻塞,将不会检查此变量,调用interrupt之后,线程就可以尽早的终结被阻
         * 塞状 态,能够检查这一变量。
         * */
        //thread.stop = true;

        /*
         * 这一方法实际上完成的是,在线程受到阻塞时抛出一个中断信号,这样线程就得以退
         * 出阻塞的状态
         * */
        thread.interrupt();

        System.out.println("====2===="+thread.getState());
        Thread.sleep(3000);
        System.out.println("Stopping application...");
        System.out.println("====3===="+thread.getState());
    }

    public void run() {
        try {
            while (!Thread.currentThread().isInterrupted()) {
                System.out.println("Thread running...");
                    //模拟线程被阻塞的情况
                    Thread.sleep(10000);
                System.out.println("===线程被阻塞,改业务无法执行=====");
            }
        } catch (InterruptedException e) {
            // 接收到一个中断异常(InterruptedException),从而提早地终结被阻塞状态
            System.out.println("Thread interrupted...");
        }

        System.out.println("Thread exiting under request...");
    }
}

输出结果

Starting thread...
====1====RUNNABLE
Thread running...
Asking thread to stop...
====2====TIMED_WAITING
Thread interrupted...
Thread exiting under request...
Stopping application...
====3====TERMINATED
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值