我对同步访问java中的私有实例变量的要求有点困惑。我有一个应用程序,执行计划任务多线程。这些任务(类的实例)有一个保存值对象的实例变量。此外,这些任务具有run方法,这些方法通过调用持有执行逻辑的其他类来执行任务(它们反过来使用更多的值对象作为处理的一部分)。
现在在高水平上,看起来所有的并行线程将产生这些任务链,实例变量,实现类和值对象。所有这些都需要线程安全吗?所有的实例变量在所有可能的类和值对象,可以潜在地并行调用?
如果多个线程将同时访问对象,并且它们的状态将发生变化,则需要使对象是线程安全的。
听起来你的任务对象不是多线程的,因为不同的线程不会访问同一个任务。如果这是真的,你就不需要让你的任务对象线程安全。
值对象是否可变,它们是否以这样一种方式共享,即同一个值对象实例可以被多个线程同时访问?如果有一个是肯定的,那么你需要使它们线程安全。
使对象线程安全的最简单方法是使其不可变。如果它的内部状态在对象构造后不能改变,那么它本质上是线程安全的。如果你不能使你的对象不可变,那么你需要同步访问任何状态可以改变的实例变量。