我在Java中有一个Singleton(在OSGi服务中),想要维护其中的一些状态(一个计数器)。
这个变量应该是静态的吗?还是同步的?或者两个都要?
或者我应该将这些操作包装在同步方法中?(这与仅使变量同步有什么不同?)
我希望服务消费者可以增加这个计数器。
public MyServiceImpl implements MyService {
private int count = 0; // static? syncronized?
public String helloWorld() { count++; return "Hello World"; }
public int getHelloCount() { return count; }
}
更新:我如何使用Map或List?是否也应该使用它们的原子版本?还是使用Synchronized更好?
AtomicInteger
会为您提供所需的线程安全性:private AtomicInteger count = new AtomicInteger(0);
,在helloWorld
中:count.incrementAndGet();
。不需要其他同步。 - assylias