Java中的线程和同步

时间:2011-03-02 13:43:26

标签: java multithreading

如果一个类中有一个synchronized方法,并且有一个线程输入它,那么另一个线程可以在另一个对象上调用相同的方法。

3 个答案:

答案 0 :(得分:7)

是的,如果方法不是static

synchronized非静态方法在this上同步。所以这个方法:

public synchronized void foo() {
  // do stuff
}

实际上相当于这个:

public void foo() {
  synchronized(this) {
    // do stuff
  }
}

static synchronized方法在当前类上同步。所以这样的方法:

public static synchronized void bar() {
  // do stuff
}

实际上相当于这个:

public static void bar() {
  synchronized(ThisClass.class) {
    // do stuff
  }
}

答案 1 :(得分:3)

如果方法标记为synchronized,则锁定保留在对象上。这意味着不会锁定对不同对象的相同方法的调用 但是,如果该方法是static,那么它将由整个类保留,并且第二次调用不可能同时运行它[并将被阻止]

答案 2 :(得分:0)

是的,另一个线程可以从这个类的实例中调用此方法