如果可以,那么如果抢占当前运行线程的线程尝试获取同一对象的锁怎么办?这些线程将永远陷入僵局,对吗?
答案 0 :(得分:1)
考虑一下:
是什么让您认为“线程B被阻止”会导致线程A 没有在某个时刻被执行?
是的,鉴于上述情况,A和B当前未进行。但是,没有什么可以阻止A继续执行其工作并在某个时候释放X。
除此之外,通常的免责声明:在2018年,几乎没有更多的单处理器系统(运行Java)。 “抢占”是一个非常模糊的概念,JVM的实际“线程行为”在很大程度上取决于JVM类型和底层操作系统。
关于优先级情况:任何合理的实现都将选择“下一个”线程来提供可以实际进行的线程集中的循环。 B是否具有更高的优先级无关紧要:它被阻止了。如果A可以进步,而B则不能,那么 A会进步并且应该释放锁。