绝对 - 毕竟,它的访问共享资源,可能通过多线程。我个人只是使用AtomicInteger
来代替。
public class MyClass {
private static final AtomicInteger count = new AtomicInteger();
public MyClass() {
count.incrementAndGet();
}
}
注意,我们现在可以把这些变量最终为变量不改变价值,我们并不需要同步任何更多的为java.util.concurrent.atomic类的整点是,他们可以无需额外的同步就可以自动使用。
即使你是在您需要同步的情况下,我不会用MyClass.class
这样做 - 这就是它的其他代码可能会决定要同步的一个参考,所以你不能真正原因有关代码更多。我会写(同样,只AtomicInteger
是不是出于某种原因不够好):
public class MyClass {
private static final Object countLock = new Object();
private static int count = 0;
public MyClass() {
synchronized(countLock) {
count++;
}
...
}
}
(在这种情况下,你想也想在countLock
其他地方同步访问count
,甚至只是为了读书。 )
你知道静态的,可变的变量是代码味道,对吗? – 2012-03-01 19:58:29
@LouisWasserman,我没有意识到他们被认为是一种气味,但我现在就做。谢谢。 – 2012-03-01 20:06:41
[这里](http://code.google.com/p/google-singleton-detector/wiki/WhySingletonsAreControversial)是一个可能解释_why_他们是代码味道的引用。它着重于单例 - 这是静态的一个特例 - 但这个问题更普遍适用。 – 2012-03-01 20:23:37