我真的不明白您的应用程序是单线程还是多线程。标题说明了一件事,而从正文我们可以推断出另一件事。我假设您使用了多个线程(否则,这个问题毫无意义——为什么要在......少于 2 个线程之间使用同步?!)。
可能存在比性能更大的问题。能见度。
您没有提供有关您所在的代码部分的任何详细信息...modify a list...
,但是了解详细信息非常重要:取决于您是如何做到的,如果您删除锁定,可能会发生什么:一个线程修改list 并且其他线程永远不会看到这些修改(或看到部分,很可能是不一致的修改)。
您似乎缺少的同步方面是,除非使用一些特定的构造(锁/易失性变量/最终字段),否则不能保证一个线程会看到另一个线程对内存所做的事情。
在这种情况下,您的保证是由锁提供的:当线程 T1 获得锁 L 时,可以保证它会在 T2 释放锁 L 之前看到线程 T2 对内存所做的所有修改。
T2 T1
acquires L
modifies a
modifies b
releases L
modifies c acquires L
reads a
reads b
reads c
releases L
在这种情况下,可以保证 T1 会看到 和 的正确值a
,b
但不能保证它在读取 时会看到什么c
。
如果您取出锁,请确保您的数据结构是线程安全的,并且如果包含的数据(即列表中的对象)不是线程安全的,请确保在每次修改和随后的数据检索之间您触发happens-before关系,否则会发生不好的事情。