以下增量代码线程在java中是否安全?

前端之家收集整理的这篇文章主要介绍了以下增量代码线程在java中是否安全?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Java代码
  1. public class IncreaseTest {
  2. public static int value = 0;
  3.  
  4. public synchronized int increment() {
  5. return value++;
  6. }
  7. }

方法增量()线程安全吗?我是否必须添加修饰符关键字volatile,如下所示:

  1. public static volatile int value = 0;

解决方法

代码不是线程安全的.实例方法将在实例上同步,如果您有多个实例,则它们将不使用相同的监视器,因此更新可以交错.

您需要从值字段中删除静态或将static添加到increment()方法.

此外,由于您已将值公开,因此还存在另一个问题,即可以在此方法之外更改或读取值,而不使用可能导致读取旧值的同步.

因此,将代码更改为以下内容将使其成为线程安全的:

  1. public class IncreaseTest {
  2. private int value = 0;
  3.  
  4. public synchronized int increment() {
  5. return value++;
  6. }
  7. }

猜你在找的Java相关文章