java中的同步(对象和静态方法)

时间:2014-01-18 15:06:48

标签: java java-ee synchronization

我对Java中的同步几乎没有疑问。我已经在网上阅读了很多内容,并且用很多信息来满足自己的需求。 我会列出我的疑问,所以请任何人帮我解决疑惑。

对象级同步:

1)以下代码示例。

public synchronized void a(){
    //todo
    }
}

LOCK使用的是什么。它是否会自动锁定“this”,因为我们在示例代码下面有它?

public void a(){
    synchronized (this) {
        //TODO
    }
}

2)我们有多个方法代码块锁定“this”。

public void a(){
    synchronized (this) {
        //TODO
    }
}
public synchronized void b(){
    synchronized (this) {
        //TODO
    }
}

这是否意味着如果b()的代码块被锁定,那么任何其他线程也不能同时访问()同时锁定对象(这个)?

班级同步:

3)对于以下代码

public static void c(){

synchronized (Main.class) {
        //todo
    }
}public static void d(){
    synchronized (Main.class) {
        //todo
    }
}public static void e(){
    //no syncronization here
}

问题1:如果c()被锁定,任何其他线程是否也能访问同步块的d()? 问题2:如果c()处于锁定状态,任何其他线程是否能够访问e()这是一种非同步方法?

1 个答案:

答案 0 :(得分:2)

  1. 是“这个”是锁
  2. 锁定在Main.class上,因此如果已经获取了c中的锁定,则其他线程无法访问该数据。
  3. 在第3点.e()总是可以被多个线程访问,无论它是什么,因为它没有同步。

    希望有所帮助:)

相关问题