【发布时间】:2026-01-28 23:15:01
【问题描述】:
我有一个 Java 中的 Singelton(在 OSGi 服务中),并希望在其中维护一些状态(计数器)。
这个变量应该是静态的吗?或同步?还是两者都有?
或者我应该将动作包装在同步方法中吗? (这与仅使 var 同步有什么不同吗?)
我希望服务操作的消费者增加这个计数器。
public MyServiceImpl implements MyService {
private int count = 0; // static? syncronized?
public String helloWorld() { count++; return "Hello World"; }
public int getHelloCount() { return count; }
}
更新:我怎么会像地图或列表这样的东西?是否也更喜欢使用这些的原子版本?或者同步更好?
【问题讨论】:
-
我对 OSGI 不熟悉,但您似乎需要将其设为静态,并且
AtomicInteger将为您提供所需的线程安全:private AtomicInteger count = new AtomicInteger(0);和helloWorld:@ 987654325@。无需其他同步。 -
@assylias - 作为答案发布,我会投票。这是正确的做法。
-
@OldCurmudgeon 在我的手机上...随时发布类似的答案。
-
静态是邪恶的...... OSGi 已经尝试不惜一切代价避免静态,以便您可以嵌套框架,并排运行多个框架等。静态是一个全局变量,它有它所有不好的一面效果。
标签: java synchronization singleton osgi