加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 02:52:27 所属栏目:Java 来源:网络整理
导读:Java代码: public class IncreaseTest { public static int value = 0; public synchronized int increment() { return value++; }} 方法增量()线程安全吗?我是否必须添加修饰符关键字volatile,如下所示: public static volatile int value = 0; 解决方法
Java代码:
public class IncreaseTest {
    public static int value = 0;

    public synchronized int increment() {
        return value++;
    }
}

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

public static volatile int value = 0;

解决方法

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

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

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

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

public class IncreaseTest {
    private int value = 0;

    public synchronized int increment() {
        return value++;
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读