【发布时间】:2012-06-21 07:33:44
【问题描述】:
请解释 Java 同步如何与静态方法一起工作?有人说它是由它的类对象完成的,但他们没有说锁是如何完成的。
【问题讨论】:
-
它不是锁定实例,而是锁定代表类的对象。谷歌了解更多详情。
标签: java static synchronized
请解释 Java 同步如何与静态方法一起工作?有人说它是由它的类对象完成的,但他们没有说锁是如何完成的。
【问题讨论】:
标签: java static synchronized
您始终在监视器对象上进行同步。每个 Java 对象都可以在这里使用。
使用同步块,您可以直接指定该对象。
synchronized (something){
}
使用同步方法,它在对象实例本身(this)上同步,因此它等同于:
synchronized (this) {
}
使用同步静态方法,它在类对象上同步,就像“有人说过”一样。
synchronized (ThisClass.class){
}
机制始终相同:只有一个线程可以同时持有锁,其他线程必须等待。
【讨论】:
static synchronized void theMethod(){} 和 static void theMethod(){ synchronized(ThisClass.class){} } 做同样的事情