我有一个关于单例模式的问题。 在单例模式中我们写
synchronized(ClassName.class){
// other code goes here
}
编写ClassName.class
的目的是什么?
最佳答案
在成员方法(非静态)中,您有两种选择使用哪个监视器(锁):“this”和“我类(class)的单个静态锁”。
如果您的目的是协调对象实例上的锁定,请使用“this”:
...
synchronized (this) {
// do critical code
}
或
public synchronized void doSomething() {
...
}
但是,如果您尝试进行安全操作,包括:
静态方法
类的静态成员
那么获取全类锁就至关重要了。静态锁上有2种同步方式:
...
synchornized(ClassName.class) {
// do class wide critical code
}
或
public static synchronized void doSomeStaticThing() {
...
}
非常重要,以下 2 种方法请勿在同一把锁上进行协调:
public synchronized void doMemberSomething() {
...
}
和
public static synchronized void doStaticSomething() {
...
}
关于java - 为什么我们要写Synchronized(ClassName.class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26946728/