我有一个与 Java 线程活锁相关的有趣问题。就这样吧。
有四个全局锁 - L1,L2,L3,L4
有四个线程 - T1、T2、T3、T4
T1 需要锁 L1,L2,L3 T2 需要锁 L2 T3 需要锁 L3,L4 T4 需要锁 L1,L2
因此,问题的模式是 - 任何线程都可以运行并以任何顺序获取锁。如果任何线程检测到它需要的锁不可用,它会释放它之前获得的所有其他锁,等待固定时间,然后再次重试。循环重复产生活锁条件。
所以,为了解决这个问题,我有两个解决方案
1)让每个线程在重试之前等待一段随机的时间。
OR,
2)让每个线程按特定顺序获取所有锁(即使一个线程不需要所有锁)
我不相信这是我唯一可用的两个选项。请指教。