非void方法需要synchronized关键字吗?

时间:2015-02-26 07:39:06

标签: java

如果方法有返回类型并且它是由两个或多个线程访问那么需要使用synchronized块或关键字与此方法?

3 个答案:

答案 0 :(得分:3)

没有。如果该方法确实改变了对其操作的对象的任何字段(即改变对象的状态)和相同的对象在两个线程之间共享,那么您可能需要它。

答案 1 :(得分:1)

当您正在读取可在另一个线程中更改的字段或写入可能在另一个线程中读取的字段时,您可能需要使用synchronized。您何时必须使用synchronized或者语言能够为您执行此操作没有具体规则。您可以根据自己的用例来决定。

答案 2 :(得分:0)

不是必需的。例如,如果您的类不提供修改此类实例的方法(然后该类被认为是不可变的),则不需要进行同步。

但是,只要至少一个线程可以写入某个成员变量,并且存在可以同时读取或写入此变量的其他线程,则需要同步对此变量的访问,使用synchronized关键字或通过显式操作锁。在某些情况下,您也可以使用原子操作(例如AtomicInteger)。