我正在考虑创建一个类(如 String、StringBuffer 等)。这可以在单线程和多线程环境中使用。我不知道开发人员可能会使用哪种环境。预计最坏的情况,我可以同步。
但是,1. 同步会影响性能。2.没有同步,就不是线程安全的。
所以,我有两个选择。
- 保持类不同步 - 但使用此类的开发人员需要在适当的时候对其进行同步。
- 拥有所有同步方法 - 并受到性能影响。
我已经看到 Java 中的许多(如果不是全部的话。例如,ArrayList over Vector)类已经演变为采用第一种方法。在为我的班级决定这两个选项之前,我需要考虑哪些事情?
或者换一种说法,我是否应该使用“public synchronized void bar()”而不是“public void bar()”,只有当我确定bar 可以在多线程环境中使用并且不应该运行时同时?
编辑 所以,很明显我在标题中误用了“实用程序类”这个词。谢谢 Jon Skeet 指出这一点。我已经从标题中删除了世界“实用程序”。
举个例子,我在考虑一个类,比如 Counter。计数器只是一个例子。还有其他方法可以实现 Counter。但是这个问题是关于同步的。Counter 对象会记录某事已经完成了多少次。但它可能用于单线程或多线程环境。那么,我应该如何处理 Counter 中的同步问题。