我需要对类级别锁定中的静态变量行为有一些了解。
设想:
考虑下面称为数据的类。
public class Data {
private static int i = 1;
private static int j = 1;
public void updateI() {
synchronized (Data.class) {
++i;
System.out.println(fmt() + " > " + Thread.currentThread().getName() + (" UPDATED > "+ i));
}
}
public void getJ() {
System.out.println(fmt() + " > " + Thread.currentThread().getName() + (" READ > "+ j));
}
}
这里,
因为线程-A已经获取了类级别的锁? 否则它将允许
同时访问这两种方法?
谢谢....
最佳答案
简而言之-它不会被锁定。
如果希望将其锁定,则还需要保护getJ函数:
public void getJ() {
synchronized (Data.class) {
System.out.println(fmt() + " > " + Thread.currentThread().getName() + (" READ > "+ j));
}
}
这与静态变量无关。变量本身无法锁定。仅访问它们。如果您允许通过getJ进行解锁访问,那么没有什么可以阻止您的。