我需要在多个线程之间同步getter函数吗?



如果我有多个线程想要访问同一个对象中的变量,使用getter,我需要synchronize (var) { var.get(); }吗?

我敢肯定,如果它是一个setter,它将是必要的,因为任何其他线程都可以设置一个新值。

但是在这种情况下,这个变量只被线程读取而不改变。

但是,多个线程可以同时检查它的值。

我需要同步getter吗?

但是在这种情况下,该变量仅由线程读取而不更改。但是,多个线程可以同时检查它的值。我需要同步getter吗?

细节决定成败。是否可以在多个线程中访问该变量取决于该字段是否为final,以及该对象是否在之前创建,这些线程是否由启动线程的同一个线程创建。这是Java内存模型在发布类方面提供的唯一保证。

如果字段是final,那么它保证被适当初始化并且对其他线程可见。如果它不是final,不管线程是否刚刚读取该字段,如果对象是在线程运行后创建的,您将需要对其进行同步(或将其标记为volatile)以更新其内存并确保该字段已被适当初始化。

如果声明变量不变,则不必同步并行读访问。

最新更新