我对同步访问java中私有实例变量的要求有点困惑。 我有一个应用程序,执行多线程计划任务。这些任务(类的实例)具有包含值对象的实例变量。此外,这些任务具有执行任务的运行方法,通过调用其他保存执行逻辑的类(它们反过来使用更多的值对象作为处理的一部分。)
现在处于较高级别,看起来所有并行线程都会产生一系列这些任务,实例变量,实现类和值对象。是否所有这些都需要线程安全?所有可能的类中的所有实例变量和可以并行调用的值对象?
答案 0 :(得分:4)
如果多个线程同时访问它们并且它们的状态将会发生变化,则需要使对象线程安全。
听起来你的任务对象不是多线程的,因为不同的线程不会访问同一个任务。如果这是真的,你就不需要让你的任务对象线程安全。
值对象是否可变并且是否以多个线程同时访问相同值对象实例的方式共享?如果其中一个是肯定的,那么你需要让它们成为线程安全的。
使对象线程安全的最简单方法是使其不可变。如果在构造对象后其内部状态无法更改,则它本身就是线程安全的。如果无法使对象不可变,则需要同步访问其状态可以更改的任何实例变量。