可以在Java的抢占中执行在关键部分执行的线程吗?

时间:2018-08-13 06:54:18

标签: java multithreading thread-safety

如果可以,那么如果抢占当前运行线程的线程尝试获取同一对象的锁怎么办?这些线程将永远陷入僵局,对吗?

1 个答案:

答案 0 :(得分:1)

考虑一下:

  • 线程A获取锁X
  • 线程A被“挂起”
  • 线程B也想锁定X
  • 线程B被阻止

是什么让您认为“线程B被阻止”会导致线程A 没有在某个时刻被执行?

是的,鉴于上述情况,A和B当前未进行。但是,没有什么可以阻止A继续执行其工作并在某个时候释放X。

除此之外,通常的免责声明:在2018年,几乎没有更多的单处理器系统(运行Java)。 “抢占”是一个非常模糊的概念,JVM的实际“线程行为”在很大程度上取决于JVM类型和底层操作系统。

关于优先级情况:任何合理的实现都将选择“下一个”线程来提供可以实际进行的线程集中的循环。 B是否具有更高的优先级无关紧要:它被阻止了。如果A可以进步,而B则不能,那么 A会进步并且应该释放锁。