加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 线程中断:它会取消接收wait()调用吗?

发布时间:2020-12-14 05:54:12 所属栏目:Java 来源:网络整理
导读:我有一个线程,它有一个传入的作业队列(一个包含作业描述的LinkedList).当没有任务可以工作时,线程在队列中等待().当外部作业调度器对象在队列中放置新作业时,会用notify()唤醒它. 在我的程序关闭时,我在Thread上调用interrupt().当线程等待wait()中的作业时,
我有一个线程,它有一个传入的作业队列(一个包含作业描述的LinkedList).当没有任务可以工作时,线程在队列中等待().当外部作业调度器对象在队列中放置新作业时,会用notify()唤醒它.

在我的程序关闭时,我在Thread上调用interrupt().当线程等待wait()中的作业时,这会引发InterruptedException.我的问题是:如果我中断线程,而不是阻塞但做某种工作,那么会发生什么,处理的项目是队列中的最后一个(所以队列现在是空的),并且在中断之前执行isInterrupted()检查标志设置好,它再??次调用wait()?它会抛出一个InterruptedException,因为中断的标志已经设置或线程永远等待,因为新的作业永远不会到达队列,没有人打断等待?

解决方法

是的,你中断的线程会在调用wait()时抛出一个InterruptedException异常.这是很简单的测试自己.
public class TestInt {
    public static void main(String[] args) throws Exception
    {
        Thread.currentThread().interrupt();

        synchronized(TestInt.class) {
            TestInt.class.wait();
        }    
    }    
}

还要注意Objectodwait()的javaodc:

InterruptedException – if any thread interrupted the current thread before or while the current thread was waiting for a notification. The interrupted status of the current thread is cleared when this exception is thrown.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读