可能重复:
Java Synchronized Block for .class同步(这)与同步(MyClass.class)
我是通过对同步的article读取。我对以下几点感到困惑,需要更多说明
1)用于同步块。如何
synchronize(this){
// code
}
从
synchronize(MyClass.class){
//code
}
2相)同步实例方法意味着线程将获得对实例独占锁,而同步静态方法意味着线程必须获得对整个班级的锁(纠正我,如果我错了)。所以如果一个类有三个方法,并且其中一个是静态同步的,那么如果一个线程获得该方法的锁定,则意味着它将获得整个类的锁定,这意味着其他两个方法也将被锁定,并且其他方法将无法访问这两种方法,因为整个班级都有锁?
只有静态类的变量会被同步(MyClass.class)锁定吗? – tgkprog
@tgkprog您不会同步变量本身,您可以通过方法同步对它们的访问。 'MyClass.class'只是一个对象,它可能(虽然我无法想象需要什么实际情况)来同步它上的实例方法,但通常这个范例用于静态方法。 –
嗯我认为同步(MyClass.class)只锁定类中声明的静态变量。将不得不查看它。所以你说如果我有1000个我的班级的实例,每个实例有100个变量,他们都会被锁定? – tgkprog