java - 如果锁本身被争用会怎样?

标签 java multithreading locking

Java 中的所有对象都有内部锁,这些锁用于同步。这个概念可以防止对象同时被不同的线程操作,或者有助于控制特定代码块的执行。

如果锁本身发生争用,会发生什么情况 - 即 2 个线程在精确的微秒请求锁。

谁得到它,它是如何解决的?

最佳答案

What will happen if the locks themselves get contended upon - i.e. 2 threads asking for the lock at the exact microsecond.

一个线程将获得锁,另一个线程将被阻塞,直到第一个线程释放它。

(旁白:其他一些答案断言在 Java 中没有“同时”这样的东西。他们错了!有这样的东西!如果 JVM 使用两个或更多多核系统的内核,那么不同内核上的两个线程可以完全相同的硬件时钟周期内请求相同的对象锁。显然,只有一个线程会得到它,但这是一个不同的问题。)

Who gets it, and how does it get resolved?

未指定哪个线程将获得锁。

它(通常)由操作系统的线程调度程序解决...使用任何使用的机制。 JVM 行为的这一方面(显然)是特定于平台的。

如果您真的非常想弄清楚到底发生了什么,可以免费获得 OpenJDK 和 Linux 的源代码。但坦率地说,您不需要知道

关于java - 如果锁本身被争用会怎样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20833433/

相关文章:

node.js - 是否有可能以某种方式在 NodeJS 中进行多线程处理?

database - 如何在给定时间后自动解锁 Oracle 中的表?

java - 我怎样才能使这个计算更快?

java - 如何避免 double 舍入到 0

java - 如何生成 Spring WebMVC CRUD API

c# - 如何注释java/c#代码

c++ - 使用QFuture调用局部类函数

database - "select for update"什么时候加锁和解锁?

java - 同步块(synchronized block)中的静态与非静态锁定对象

java - 在 CrudRepository 中级联添加记录