JAVA---线程中断(详细)

问题是最好的老师!一、思考问题一:什么情况下线程会中断?线程自己会中断吗,为什么要去中断一个线程,在什么情况下才能中断一个线程。问题二:如何中断一个线程? 问题三:线程被中断意味着什么?线程被中断了,其状态是什么,被中断的线程还能继续执行吗。二、带着疑问看源码与Thred中断相关的方法(除去private native之外可被调用)有Thread.interrupt(),...
摘要由CSDN通过智能技术生成

问题是最好的老师!

一、思考

  • 问题一:什么情况下线程会中断?

线程自己会中断吗,为什么要去中断一个线程,在什么情况下才能中断一个线程。

  • 问题二:如何中断一个线程?
  • 问题三:线程被中断意味着什么?

线程被中断了,其状态是什么,被中断的线程还能继续执行吗。

二、带着疑问看源码

与Thred中断相关的方法(除去private native之外可被调用)有Thread.interrupt(),Thread.interrupted(),Thread.isInterrupted(),从字面意思可以看出interrupt方法为中断线程的方法,其余两个为判断线程是否中断。接下来一个一个分析。

  • 方法一:interrupt方法

看这个方法之前先知道如下有两个对象(属于Thread),先不管什么意思,interrupt方法会用到:

private volatile Interruptible blocker;
private final Object blockerLock = new Object();

//属于Thread的实例方法,当被调用时,中断当前线程。

public void interrupt() {
    //如果当前线程实例不是正在执行的线程,例如在A(Thread.currentThread)线程执行过程中中断B(this)线程(先不讨论为什么这么做,等分析完再讨论),检查访问权限。
    if (this != Thread.currentThread())
       //看下面checkAccess方法分析(实际没有做权限校验)。
        checkAccess();

    synchronized (blockerLock) {
        Interruptible b = blocker;
        //查看Thread内所有方法,唯有Thread.blockedOn方法会设置blo
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值