0

我对在java中同步访问私有实例变量的要求有点困惑。我有一个多线程执行计划任务的应用程序。这些任务(类的实例)有一个包含值对象的实例变量。此外,这些任务具有 run 方法,这些方法通过调用保存执行逻辑的其他类来执行任务(它们反过来使用更多的值对象作为处理的一部分。)

现在从高层次上看,所有并行线程都将生成这些任务、实例变量、实现类和值对象的链。所有这些都需要线程安全吗?所有可能并行调用的类和值对象中的所有实例变量?

4

1 回答 1

4

如果多个线程要同时访问它们并且它们的状态要改变,则需要使对象成为线程安全的。

听起来您的任务对象不是多线程的,因为不同的线程不会访问同一个任务。如果这是真的,你就不需要让你的任务对象线程安全。

值对象是否可变,它们是否以这样的方式共享,即多个线程可以同时访问同一个值对象实例?如果其中一个是肯定的,那么您需要使它们成为线程安全的。

使对象线程安全的最简单方法是使其不可变。如果在构造对象后它的内部状态不能改变,那么它本质上是线程安全的。如果您不能使您的对象不可变,那么您需要同步访问任何可以更改其状态的实例变量。

于 2011-11-21T05:13:51.643 回答