上一篇《聊聊同步、异步、阻塞与非阻塞》[//www.greatytc.com/p/aed6067eeac9]已经通俗的讲解了,要理解同步、异步、阻塞与非阻塞重要的两...
刚刚 用 idea debug 了 一下 源码,发现你说的 中断的 描述 不够 准确,
1. 如果 当前线程 是 非中断状态(不是 第一次 调用 Thread.interrupted()),此时遇到 LockSupport.park( ) 会立刻阻塞
2. 如果当前线程 是 中断 状态 ,那么 LockSupport.park( ) 失效,接下来 调用 Thread.intrrupted() 方法 返回 此时 的 中断状态 ,也就是 True ,同时 会 清除 线程 的 中断状态,但是 此时 调用 LockSupport.park( ) 还是会失效的, 也就是 说 在 非 连续两次 调用 Thread.interrupted() 方法,那么
LockSupport.park( ) 执行两次 才会生效 ,也就是 Thread.interrupted()-------->LockSupport.park( ) 失效 ------>此时线程的状态是 false,也就是 中断状态已经重置了-------->LockSupport.park( ) 失效------------------>LockSupport.park( ) 成功阻塞 或者 直接 Thread.interrupted()-------->LockSupport.park( ) 失效 ------>此时线程的状态是 false,也就是 中断状态已经重置了-------->Thread.interrupted()------------------->LockSupport.park( ) 阻塞
深入理解AbstractQueuedSynchronizer(一)博客链接:http://www.ideabuffer.cn/2017/03/15/深入理解AbstractQueuedSynchronizer(一)/ AbstractQue...
你提到 在 抛出异常的时候 finally 中的代码 才会 执行 ,那么我想 问 什么时候 才能抛出异常呢 ? 哪个地方 可能会抛出异常呢 ? 我没找到,请指点一下,谢谢 !
深入理解AbstractQueuedSynchronizer(一)博客链接:http://www.ideabuffer.cn/2017/03/15/深入理解AbstractQueuedSynchronizer(一)/ AbstractQue...