Java高并发编程详解-多线程架构与设计:线程间的通信( 二 )
测试主动interrupt对if中使用wait的影响这里主动interrupt , 可见当producer被interrupt后 , producer就略过了判断 , 继续添加了一个event
文章插图
wait与sleep的
- 相同:使线程阻塞可以中断
- 不同:wait是Object的方法 , sleep是Thread的wait必须要在同步代码块中执行 。 wait会释放monitor的锁 , sleep不会sleep短暂休眠后会退出阻塞?(TODO)wait(没有指定时间的话)必须被中断才会退出阻塞 。
- 无法中断synchronized不像sleep和wait那样 , 可以被中断 。
- 没有等待时间其他线程获取锁的拥有权必须要等待锁的拥有者(线程)释放后才能执行 。
关键代码
文章插图
从wait中被notify或者等待超时后 , 会因为while(locked) , locked为false , 说明没有线程持有monitor的拥有权 , 因此跳出while设置locked=true;this.currentThread=currentThread();
文章插图
优化 , 超时后清除blackList
文章插图
推荐阅读
- 计算机专业大一下学期,该选择学习Java还是Python
- 未来想进入AI领域,该学习Python还是Java大数据开发
- 学习大数据是否需要学习JavaEE
- 从事Java开发时发现基础差,是否应该选择辞职自学一段时间
- 2021年Java和Python的应用趋势会有什么变化?
- 普通大学计算机专业的本科生,该选择主攻前端还是Java
- Java语言会不会随着容器的兴起而衰落
- 大一有考研计算机专业的打算,该学习C++还是Java
- 计算机专业的同学在掌握了Java之后,还可以学习哪门后端语言
- 不实习,如何增加Java项目经验