java - java多线程中实例上获取的锁

标签 java multithreading object locks

我读到java中的锁是在实例(对象)的基础上获得的(在实例方法的情况下)
还可以在类的对象上获取锁(在静态方法的情况下)。

但我想知道特定对象一次可以获得多少个锁

一个对象可以同时拥有多个锁吗?
如果是,请举例说明。

请帮我理清我的概念。

最佳答案

每个同步块(synchronized block)仅针对一个对象。对象不会拥有锁。它是锁定对象以对其进行操作的执行线程。

始终在对象上获取锁。例如下面是可以获得锁的两个实例。第一个锁定类(对象)的实例。

Object obj = new Object();

synchronized(obj) {
    workOnIt(obj);
}

第二个看起来像是锁定了一个类。但 Test.class 是我的 Test 类的 java.lang.Class 实例的特殊表示。

synchronized(Test.class) {
    // call some static method here
}

关于java - java多线程中实例上获取的锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5068061/

相关文章:

java - Ant:如何在多个项目上执行任务

java - 独立 Jython : Import Error (Apache-POI)

c++ - 以这个程序中使用的方式使用互斥量是否正确?

c++ - Qt GUI 不能像我预期的那样与 std::thread 一起工作

ruby - 在 Ruby 中,为什么 inspect() 会打印出某种与 object_id() 给出的不同的对象 ID?

java - 如何使用 Java 和 SAX 解析我的简单 XML 文件?

Android Studio 中的 Javadoc @link 引用

python - 如何从另一个线程上调用的回调返回主线程

javascript - 如何使用javascript从数组中删除多个值?

javascript - 使用 'this' 的 Object.prototype