一马平川
不积跬步无以至千里,后继才能薄发

线程活跃性问题笔记

2021年09月30日
0
未分类

线程在相互等待

死锁

  • 获取锁顺序导致死锁

可以通过 System.identityHashCode() 方法获取锁对象的hash,然后通过hash值进行判断,保证每次获取锁的顺序都是一致的,避免因获取锁顺序导致死锁

  • 开放调用

在获取了锁的方法中调用一个需要获取另一个锁的方法,可能会导致死锁,可以通过降低锁的粒度,使得方法调用同步代码块不包含需要获取锁的方法调用。保证开放调用。

  • 定时锁

获取锁时设置超时时间,避免无限期等待下去

饥饿

线程无法访问需要的资源导致无法执行,叫做饥饿,如等待cpu周期、等待其他锁释放。

活锁

线程陷入活锁时不会阻塞线程,但是会一直重试,循环执行相同的操作,例如消息队列消费者处理时出错回滚,并把消息重新发送回队列中,导致活锁,这样的消息也叫 毒药消息(Poison Message)

在重试机制中引入随机性可以避免活锁

如果喜欢这篇文章,可以给作者评个份哦~

原文声明: "转载本站文章请注明作者和出处Nothinglin ,请勿用于任何商业用途"

公众号:苦逼的学生仔