java - 同步(本)与同步(MyClass.class)

标签 java synchronization

Possible Duplicate:
Java Synchronized Block for .class

我正在阅读 article关于同步。我对以下几点感到困惑,需要更多说明

  1. 用于同步块(synchronized block)。如何

    synchronized (this) {
        // code
    }
    

    不同于

    synchronized (MyClass.class) {
        // code
    }
    
  2. 同步实例方法意味着线程必须获得实例的独占锁,而同步静态方法意味着线程必须获得整个类的锁(如果我错了,请纠正我)。因此,如果一个类具有三个方法,其中一个是静态同步的,那么如果一个线程在该方法上获得锁,那么这意味着它将在整个类上获得锁。那么这是否意味着其他两个也将被锁定,并且由于整个类都处于锁定状态,因此没有其他方法能够访问这两个方法?

最佳答案

MyClass.classthis 是不同的东西,它们是对不同对象的不同引用。

this - 是对该类的这个特定实例的引用,并且

MyClass.class - 是对 MyClass 描述对象的引用。

这些同步块(synchronized block)的不同之处在于,第一个将同步所有具体处理 MyClassthis 实例的线程,第二个将同步 all 线程独立于调用哪个方法的对象。

关于java - 同步(本)与同步(MyClass.class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14495776/

相关文章:

java - list 合并失败 : android:exported needs to be explicitly specified for <activity>

java - 如何在 JFreeChart 中的数 Axis 域上旋转刻度线标签?

java - Spring Boot 使用 Gradle 找不到 spring-boot-starter-dao-jpa 包?

multithreading - Delphi图像处理同步线程

java - EJB 和同步

java - WebSocket session 之间共享的所有成员是否应该同步?

C++如何在银行账户转账时避免竞争条件

java - 更改颜色而不影响之前绘制的任何内容

java - 如何在Web服务器中从网络加载大文件而不影响性能?

java - 如何在 Java 单例中维护可变状态