如何规避Thread专题(9)中的活跃度风险?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2691个文字,预计阅读时间需要11分钟。
此文章被作者收录在系列文章《架构师必备》(系列)中。文中强调安全性和灵活性,通常用锁来保障线程安全、线程池和信号量来约束资源使用。但不当使用锁可能导致问题。
此文被笔者收录在系列文章 架构师必备(系列) 中
安全性和活跃度通常互相牵制,我们一般用锁来保证线程安全、线程池和信号量来约束资源的使用,但使用不当就容易造成“死锁”和“资源死锁”。java不能从死锁中进行恢复。恢复应用程序健康的唯一方式就是中止或重启,然后寄希望于不要发生这样的事情。
一、死锁
如果所有线程以通用的固定秩序获得锁,程序就不会出现锁顺序死锁问题了。同时也要注意外部参数的顺序,下面的例子就存在锁顺序死锁的风险。当存在嵌套锁时,我们必须制定锁的顺序解决这个问题,并在整个应用程序中,获得锁都必须以这种方式。
本文共计2691个文字,预计阅读时间需要11分钟。
此文章被作者收录在系列文章《架构师必备》(系列)中。文中强调安全性和灵活性,通常用锁来保障线程安全、线程池和信号量来约束资源使用。但不当使用锁可能导致问题。
此文被笔者收录在系列文章 架构师必备(系列) 中
安全性和活跃度通常互相牵制,我们一般用锁来保证线程安全、线程池和信号量来约束资源的使用,但使用不当就容易造成“死锁”和“资源死锁”。java不能从死锁中进行恢复。恢复应用程序健康的唯一方式就是中止或重启,然后寄希望于不要发生这样的事情。
一、死锁
如果所有线程以通用的固定秩序获得锁,程序就不会出现锁顺序死锁问题了。同时也要注意外部参数的顺序,下面的例子就存在锁顺序死锁的风险。当存在嵌套锁时,我们必须制定锁的顺序解决这个问题,并在整个应用程序中,获得锁都必须以这种方式。

