用于多个同步块的Java

时间:2018-03-02 10:00:35

标签: java multithreading asynchronous

我有一些带有许多并发问题的旧代码。代码连接到带有套接字的服务器。 关于套接字是否连接有多个条件,这是通过使用布尔变量(在多个线程之间使用)来实现的

一个明显的解决方案是: 添加更多锁,并嵌套锁,使连接状态同时锁定读和写状态,从而允许独立地进行读写锁。这会导致一些丑陋的代码

还有哪些其他选择?

请记住,系统已经过测试/正在生产中,并且是一个非常古老的系统,其中有一些功能被添加到现有类中(我有时会看着类),重写整个代码库是一个选项,只是最后一个我想做。

编辑: 由于我找到了一些答案并试图重新提出我的问题以便更好地理解这种情况,我意识到这不是一个解决方案的问题,而不是要求重写现有代码,这是我想要防止的,但不可避免。

1 个答案:

答案 0 :(得分:1)

关于修改代码和后续系统/回归测试的评论。无论你是否实现了新的东西,或者如果你只是添加同步的块和锁定,你将不得不进行相同数量的测试。

进行显式同步是一项有风险的业务。它是低级别的,因此容易出错。

另一种方法是在考虑SOLID的情况下重新设计一下你的系统。创建抽象并隔离需要在适当结构中同步的代码片段。我通过在中间队列中编写所有操作并在单个线程中使用元素来给出前面的示例。我不知道你的代码和情况我不知道这是否适用。但这是一个关于如何通过引入中间结构隐式解决你的问题的例子。

我认为根据您的意见,关键在于无论您做什么 - 放置sycnhronization块或重新设计它。在我看来,您需要执行的测试数量是相同的。但拥有更好的模型肯定会为调试和维护代码节省大量时间。