并发理论:InterruptedException有啥用?

发布时间:2026/9/29 11:43:32
并发理论:InterruptedException有啥用? InterruptedException异常是如何来的InterruptedException中断异常是 Java 多线程编程中最常见的检查型异常之一当线程处于WAITING和TIMED_WAITING状态时如果其他线程调用了该线程的interrupt()方法会抛出InterruptedException阻塞的方法就会立即抛出 InterruptedException并提前结束阻塞ObjectlocknewObject();Threadthread1newThread(()-{synchronized(lock){try{lock.wait();}catch(InterruptedExceptione){// 在这里抛出 InterruptedExceptione.printStackTrace();}}});thread1.start();newThread(()-{thread1.interrupt();}).start();中断状态标志每个线程都有一个内部的布尔标志用于表示其中断状态如果目标线程正处在如下阻塞方法中它会立即清除中断状态并抛出这个异常Thread.sleep(long millis)线程休眠。Object.wait()等待获取对象锁通知。Thread.join()等待另一个线程执行完毕。并发容器的阻塞操作如 BlockingQueue.take()、BlockingQueue.put() 等。显式锁的中断响应如 ReentrantLock.lockInterruptibly()如果目标线程没有在阻塞中interrupt() 仅会将其中断状态设为 true。线程可以通过轮询 Thread.interrupted() 或 Thread.isInterrupted() 方法来检查这个标志并自行决定如何响应Thread类提供了如下2个方法来判断线程是否是中断状态isInterrupted()interrupted()这2个方法虽然都能判断状态但是有细微的差别TestpublicvoidtestInterrupt()throwsInterruptedException{ThreadthreadnewThread(()-{while(true){}});thread.start();TimeUnit.MICROSECONDS.sleep(100);thread.interrupt();// trueSystem.out.println(thread.isInterrupted());// trueSystem.out.println(thread.isInterrupted());// trueSystem.out.println(thread.isInterrupted());}TestpublicvoidtestInterrupt2(){Thread.currentThread().interrupt();// trueSystem.out.println(Thread.interrupted());// falseSystem.out.println(Thread.interrupted());// falseSystem.out.println(Thread.interrupted());}isInterrupted和interrupted的方法区别如下Thread#isInterrupted测试线程是否是中断状态执行后不更改中断状态Thread#interrupted测试线程是否是中断状态执行后将中断标志更改为falseAQS中就有类似的逻辑publicfinalvoidacquireInterruptibly(intarg)throwsInterruptedException{// 1. 前置中断检查若调用前线程已被中断直接抛出异常if(Thread.interrupted())thrownewInterruptedException();// 2. 尝试获取资源由子类实现如 ReentrantLockif(!tryAcquire(arg))// 3. 获取失败入队阻塞且在阻塞期间【强响应中断】doAcquireInterruptibly(arg);}InterruptedException有啥用InterruptedException 的核心设计作用可以概括为一句话为 Java 多线程提供一种“安全、可控、协作式”的取消与停止机制解决强制终止线程的安全隐患在早期 JavaJDK 1.0中Thread.stop() 可以强制直接杀死一个线程。但这带来了严重的系统风险为了解决这个问题Java 废弃了 Thread.stop()转而设计了以 InterruptedException 为核心的协作式中断机制外部只能发出“请停下来”的请求由线程自己决定何时、如何安全地释放资源并退出可以及时打断阻塞状态如果没有中断机制线程将无法感知外部的停止指令会一直卡在阻塞调用处直到等待超时或自然唤醒。这会导致线程池无法关闭、系统响应变慢甚至卡死

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询