2

假设在 java 中我们有一些对象/组(服务对象、控制器等),我们在单线程应用程序中使用它们。让我们用“A”来称呼这个对象。

一段时间后,我们正在扩展我们的线程模型并希望在其他线程(例如侦听器线程等)中也使用这些对象。

当然,在这种情况下,我们必须注意同步问题等等。但是直到现在使用对象“A”的开发人员无法意识到我们的架构更改,如果他将向类/(对象)“A”添加一些东西,他可能无法正确处理同步。当然,这个开发人员应该检查代码中所有出现的类“A”,但如果他不习惯这个类用于多线程环境,他可能不会这样做。

我的问题是......这种情况有什么好的模式,它将类/(对象)“A”标记为“多线程可用”。例如,某些接口的实现仅用于“信息”目的等。

4

2 回答 2

2

我通常在代码顶部的 JavaDoc 中添加注释,表明某些内容是为多线程使用而设计的。

我也经常加单元测试,这样用处就清楚了。

然后由其他开发人员阅读文档和单元测试,以便他们了解预期用途。

于 2013-03-05T12:46:06.627 回答
1

如果该对象与其所有客户端松散耦合,则应该可以创建“A”的线程安全版本。

直接来自 JDK 的示例:

java.lang.Appendable - the interface
java.lang.StringBuilder - regular implementation
java.lang.StringBuffer - thread-safe implementation

客户端不必知道它是否是线程安全版本,因为它通过接口间接使用对象:

void doSomething(Appendable a) {
   a.append(...);
}

从实际的角度来看,使用控制反转可以显着帮助。使用接口进行业务合同声明,使用 Spring(或任何其他依赖注入框架)进行组件注入(是否线程安全仅取决于配置)。

底线:您可以通过松散耦合和智能架构设计(关注点分离等)来防止此类问题。

于 2013-03-05T13:13:37.257 回答