Java多线程 -- JUC包源码分析7 -- 对Interrupt的深刻理解
来源:互联网 发布:java两个日期相差分钟 编辑:程序博客网 时间:2024/05/08 14:59
在前面的源码分析中,很多地方用到了Interrupt,在此,对Interrupt做一个深刻总结。
一、“中断“这个词有误区,它并不是真的中断一个线程,准备说,应该叫做“中断轻量级阻塞”。
什么叫“轻量级阻塞”呢?
就是调用以下这几个函数,所造成的线程阻塞。此时线程是处于Waiting状态,会响应t.interrupt。响应方式,前4个,是直接抛出InterruptException异常,最后1个,是线程被唤醒。
sleep/join/wait/await/LockSupport.park
什么叫“重量级阻塞”呢?
synchronzied, lock,这2个不会响应中断。但有点区别: synchronized会使线程处于Blocked状态,lock会使线程处于Waiting状态,因为lock内部用的LockSupport.park.
二、当你的线程正在正常运行时,这个时候调用t.interrupt,除了给该线程置了一个标志位,其他什么反应都没有。
那什么时候,这个标志位会起作用呢?后续线程调用上面的“轻量级阻塞”函数,会起作用。
三、总结: 中断,其实是提供了一种线程在”轻量级阻塞“状态下,可以被唤醒的机制。
因此中断通常都会和轻量级阻塞一起使用,很少会单独使用。
附:interrupt相关的3个函数
t.interrupt() //发中断信号
t.isInterrupted() //只是判断自己是否被中断
Thread.interrupted() //判断,并且重置标志位
0 0
- Java多线程 -- JUC包源码分析7 -- 对Interrupt的深刻理解
- Java多线程 -- JUC包源码分析8 -- 对happen before的深刻理解
- Java多线程 -- JUC包源码分析10 -- ConcurrentLinkedQueue源码分析
- Java多线程 -- JUC包源码分析11 -- CyclicBarrier源码分析
- Java多线程 -- JUC包源码分析12 -- ThreadPoolExecutor源码分析
- Java多线程 -- JUC包源码分析16 -- Exchanger源码分析
- Java多线程 -- JUC包源码分析1 -- CAS/乐观锁
- Java多线程 -- JUC包源码分析3-- volatile/final语义
- Java多线程 -- JUC包源码分析6 -- ConcurrentHashMap
- Java多线程 -- JUC包源码分析15 -- SynchronousQueue与CachedThreadPool
- Java多线程 -- JUC包源码分析19 -- ForkJoinPool/ForkJoinTask
- Java多线程 -- JUC包源码分析1 -- CAS/乐观锁
- Java多线程 -- JUC包源码分析3-- volatile/final语义
- [Java多线程 十]---JUC包下线程池的理解
- [Java多线程 十]---JUC包下线程池的理解
- Java多线程 -- JUC包源码分析13 -- Callable/FutureTask源码分析
- Java多线程 -- JUC包源码分析14 -- ScheduledThreadPoolExecutor与DelayQueue源码分析
- Java多线程 -- JUC包源码分析9 -- AbstractQueuedSynchronizer深入分析-- Semaphore与CountDownLatch
- Linux下mysql自动备份压缩
- 使用异步IO大大提高应用程序的性能之一
- springmvc4使用fastjson返回json
- python--strip()函数 介绍
- 字符串编码
- Java多线程 -- JUC包源码分析7 -- 对Interrupt的深刻理解
- 《管理转型》读后感
- 怎么把DHTMLX的ToolBar里的input变成下拉选项框的
- Codeforces Round #344 (Div. 2) E. Product Sum (三分)
- poj1236 tarjan 模版题
- CCF——集合竞价(模拟)
- Leetcode 393. UTF-8 Validation UTF-8 编码识别 解题报告
- 返回min元素的栈
- Pentaho CDE 动态传参