《JAVA并发编程实践》读书笔记(五)

第10章 避免活跃性危险
如果所有的线程以固定的顺序来获得锁,那么在程序中就不会出现锁顺序死锁的问题。

10.1 锁顺序死锁
如果存在嵌套的锁获取操作,则很容易发生动态的锁顺序死锁。如果可能出现这种情况,则可以计算存在竞争的两个对象的散列值,按照散列值的大小顺序一致性地加锁。也可以在获得这两个锁之前,使用一种叫做“加时赛”锁的机制去竞争获得锁。如果持有锁的阶段是发生在两个不同的外部方法中,那么将有可能出现死锁问题,或者阻塞时间过长,导致其他线程无法及时获得当前被持有的锁。如果在调用方法时不需要持有锁,那么这种调用方法被称为开放调用。开放调用有可能失去原子性。

10.2 资源死锁
如果多个线程互相持有彼此正在等待的锁而又不释放自己已持有的锁,会发生死锁。

10.3 死锁的避免与诊断
-支持定时的锁 (使用tryLock)代替内置锁机制。当获取锁时候超时,则可以释放这个锁,过一段时间再尝试。(这个情况只有同时获取两个锁的时候才有用)。
-线程转储 要在UNIX平台触发线程转储的操作,可以通过JVM向进程发送SIGQUIT信号,或者在UNIX按下Ctrl+.

10.4 其他活跃性问题
-饥饿 (避免使用线程优先级)
-糟糕的响应性 (使用线程优先级,将CPU密集型置于后台)
-活锁(在重试机制中加入随机性)

第11章 性能与可伸缩性

第12章 并行程序的测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值