我有一个与Java线程活锁有关的有趣问题。在这里。Java线程锁住
有四个全局锁 - L1,L2,L3,L4
有四个线程 - T1,T2,T3,T4
T1需要锁L1,L2,L3 T2需要锁L2 T3需要的锁L3,L4 T4需要锁L1,L2
所以,问题的模式是 - 任何线程都可以运行并以任何顺序获取锁。如果任何线程检测到它所需的锁不可用,它将释放之前获取的所有其他锁,然后再次重试之前等待一段固定时间。循环重复导致活锁定条件。
因此,要解决这个问题,我心里有
1两种解决方案),让每一个线程等待重试之前的一段随机时间。
OR,
2)让每个线程收购全部以特定的顺序(即使线程不要求所有的 锁)
我不相信这些是仅有的两个选项提供给锁我。请指教。
确实。 (1)具有可避免的延迟并且(2)具有极端的死锁潜力,正如Zim-Zam所强调的那样,除非未能获得锁的线程释放已经获得并稍后重试的线程。 – 2013-04-22 15:41:41