ARTS 源于极客时间《左耳听风》专栏组织的一个学习打卡活动,四个字母对应着四个行动准则:
- Algorithm:每周至少做一个 leetcode 的算法题
- Review:阅读并点评至少一篇英文技术文章
- Tip:学习至少一个技术技巧
- Share:分享一篇有观点和思考的技术文章
Algorithm
每周至少做一个 leetcode 的算法题
implement-stack-using-queues
简单题,使用两个 Queue 实现一个 Stack
Review
阅读并点评至少一篇英文技术文章
Why are Thread.stop, Thread.suspend and Thread.resume Deprecated?
这篇 Oracle 的官方文档,解释了它们弃用 Thread 的 stop, suspend, resume 方法的原因。
弃用 Thread.stop 的原因
stop 一个线程会导致释放掉它所持有的所有对象监视器锁,引起数据不一致的情况,增加排查的难度,让系统变得不可控。
Thread.stop 的替代方案
- 使用自定义的标志位
- 使用
Thread.interrupt,停止处于等待状态的线程
如果 catch 到 InterruptedException 以后没有处理它的能力的话,需要继续“传递”这个 interrupt 信息,不是简单地 rethrow 一个 InterruptedExcetion,而是要通过如下方式:
Thread.currentThread().interrupt();
原因详见 interrupt 方法的 JavaDoc:
If this thread is blocked in an invocation of the wait(), wait(long), or wait(long, int) methods of the Object class, or of the join(), join(long), join(long, int), sleep(long), or sleep(long, int), methods of this class, then its interrupt status will be cleared and it will receive an InterruptedException.
弃用 Thread.suspend, resume 的原因
容易导致死锁,建议使用 Object.wait() 和 notify() 代替
Tips
学习至少一个技术技巧
复习:
-
JUC 工具包
- 阅读
FutureTask源码- 关键点 - 等待队列 (
get入队;finishCompletion出队) - 关键点 - 状态转移 (四种最终状态:
normal, exceptional, canceled, interrupted) - 为什么需要一个中间状态
COMPLETING / INTERRUPTING - 为什么使用
UNSAFE.putOrderedInt(this, stateOffset, ${finalState});(finalState: normal, exceptional, interrupted)
- 关键点 - 等待队列 (
- 阅读
-
Synchronized vs ReentrantLock
-
JMM (Java Memory Model)
- 如何保证“内存可见性”
- Happen-Before 原则
Share
分享一篇有观点和思考的技术文章
TODO