【发布时间】:2018-03-02 10:00:34
【问题描述】:
我有一些带有许多并发问题的旧代码。该代码使用套接字连接到服务器。 套接字是否连接有多个条件,这是通过使用布尔变量实现的(不会在多个线程之间使用)
一个明显的解决方案是: 添加更多锁,并嵌套锁,使连接状态同时锁定读取和写入状态,从而可以独立进行读取和写入锁。这会导致代码有些难看
还有哪些其他选择?
请记住,该系统已经过测试/生产中,并且是一个相当旧的系统,其功能被添加到现有类中(有时我会畏缩查看这些类)重写整个代码库是一种选择,只是最后一个我想做。
编辑: 由于我找到了一些答案并试图改写我的问题以更好地理解情况,我意识到这不是一个有解决方案的问题,而不要求重写现有代码,这是我想要防止的,但不可避免的。
【问题讨论】:
-
为什么不做一个中间队列来保存你想要执行的操作并在单个线程或类似的东西中执行而不是进行显式同步?
-
我同意:锁定总是容易出错。如果可能的话,把你的时间/精力投入到构建没有这种低级概念的东西上。
-
@GhostCat 完全正确。我觉得他前进的方向太容易出错了。
-
听起来像xy problem。发布您的代码以及问题所在 - 可能有更好的方法来做事。另请查看
ReentrantReadWriteLock -
@ErwinBolwidt,请继续阅读,似乎是这样,在提问之前我很担心,我会重新提出问题。问题在于它是存在锁定/并发问题的现有代码,这是试图以最小的努力修复现有系统。
标签: java multithreading asynchronous