java - 哪个线程将获得锁?

标签 java multithreading concurrency synchronization

假设我们有多处理器机器和多线程应用程序。如果两个线程可以访问同步方法并且它们同时执行,哪个线程将获得锁? 或者会发生什么?

谢谢

最佳答案

行为将是非确定性的(即,任一线程都可能获得锁),并且它可能因执行而异。这是因为它取决于特定的 JVM 实现和线程的特定调度。

根据这篇文章,JVM 规范对公平性没有任何限制:

Fairness
The Java memory model does not specify any fairness requirement for threads or preemptive multi-threading. A thread can refuse to surrender the CPU to another thread and throw the system into deadlock. The rules for fairness to other threads are defined by the individual JVM implementations.

也就是说,除非您小心地同步您的程序,否则理论上一个线程可能会被调度程序饿死。

关于java - 哪个线程将获得锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3952804/

相关文章:

c++ - 你如何获得当前信号量的计数?

Node.js Cluster + Express 始终调用同一个工作线程

java - 如何获取当前方法执行的线程数?

google-app-engine - GAE Golang 实现一些独特的请求队列?

java - 什么时候创建分配给实例变量的对象

java - 将 JLabel 放置在 GridBagLayout 的左上角

multithreading - 我的 Go 程序如何让所有 CPU 内核保持忙碌状态?

java - 关闭套接字连接

java - 在Java中实现指针风格的BST?

java - SearchAPI 和 Hibernate 子树意外结束