在Java中的线程之间共享对象的最佳实践或原则

han*_*arm 4 java multithreading

我试图搜索但找不到我正在寻找的确切答案因此提出了一个新问题.

如果您希望在多个线程之间共享任何可变对象,是否有任何最佳实践/原则/指南可以执行此操作?

或者它会根据具体情况而变化?

Tim*_*m B 5

在线程之间共享可变对象是有风险的.

最安全的方法是使对象不可变,然后您可以自由地共享它们.

如果它们必须是可变的,那么每个对象都需要使用通常的方法来确保它们自己的线程安全.(synchronized,AtomixX等).

保护单个对象的方法会有很大差异,具体取决于您使用它们的方式以及使用它们的方式.


Pau*_*ida 5

在java中,你应该同步任何改变/读取共享对象状态的方法,这是最简单的方法。

其他策略是:

  • 例如,使用线程安全类(ConcurrentHashMap)
  • 锁的使用
  • 使用 volatile 关键字,以避免陈旧的对象(有时可以用作轻量级同步器)

他们的关键是同步您的更新/读取以保证一致的状态,您这样做的方式可能会有很大差异。