用于多个同步块的Java

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用于多个同步块的Java相关的知识,希望对你有一定的参考价值。

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

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

还有哪些其他选择?

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

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

答案

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

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

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

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

以上是关于用于多个同步块的Java的主要内容,如果未能解决你的问题,请参考以下文章

Java代码质量改进之:同步对象的选择

同步代码块

深入理解Java中的同步静态方法和synchronized(class)代码块的类锁

与 Java 中的 volatile 字段和同步块的关系发生在之前 - 以及它们对非易失性变量的影响?

java线程同步: synchronized详解(转)

线程安全加锁的代码块的实现