我在单例模式的问题。 在单例模式我们写
synchronized(ClassName.class){
// other code goes here
}
什么是写作的目的ClassName.class
?
我在单例模式的问题。 在单例模式我们写
synchronized(ClassName.class){
// other code goes here
}
什么是写作的目的ClassName.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() {
...
}
每个类(例如Foo
)具有一个相应的,唯一的实例java.lang.Class<Foo>
。 Foo.class
是一个文本类型的Class<Foo>
其允许获得这种独特的实例的引用。 并使用
synchronized(Foo.class)
允许此对象上同步。
您传递到同步块中的对象被称为监视器。 由于它表示该对象的类别className.class
是保证只在JVM中存在,一旦它意味着只有一个线程可以进入该同步块。
据单例模式中使用的,以确保单个实例在JVM中存在。