【问题标题】:Integer value not increment every time整数值不会每次都增加
【发布时间】:2018-10-08 05:49:42
【问题描述】:

我声明了一个 int 值,它试图增加每次按钮点击,但一些时间值不增加,一些在 2 或 3 次点击后增加工作。我总是得到日志,所以单击事件没有问题,已经尝试过没有静态但仍然无法正常工作。

public static int TotalScore = 0;

btnsubmit.setOnClickListener(new View.OnClickListener() 
{
            @Override
            public void onClick(View view) {
                initScoreSubmit();
            }
 });

public void initScoreSubmit()
{

        TotalScore++;
        txtTotalPoint.setText("Total Point: " +   String.valueOf(TotalScore));

        settings.set(AppSettings.Key.UserTotalPoint, TotalScore);

        Log.d(TAG, "Total_point "+TotalScore);
}

【问题讨论】:

  • submitScore() 方法有什么作用?
  • 尝试使TotalScore volatile,或使用AtomicInteger
  • 我不是安卓专家,但你认为它是在另一个线程中更新的,尝试使用 volatile 变量
  • 这可能是因为执行 initScoreSubmit 方法可能存在延迟。因此,当按下按钮时,将按钮设置为禁用,并在登录 initScoreSubmit 方法后将按钮设置为启用
  • 请显示完整代码的minimal reproducible example,而不是两个方法和一个类变量

标签: java android int


【解决方案1】:

你能告诉我为什么不是静态值或只有 int 不起作用。

因为 Java 内存模型。

如果一个线程写入一个变量,另一个线程读取该变量,保证第二个线程看到第一个线程写入的值的唯一方法是:

  • 将变量声明为volatile
  • 同步两个线程,或者
  • 参考线程安全类替换裸变量;例如一个AtomicInteger。变量应该是final

您需要阅读 Oracle 并发教程,特别是有关同步的部分:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-28
    • 2020-08-27
    • 1970-01-01
    • 2016-12-24
    • 2018-11-04
    • 2015-10-24
    • 2015-12-16
    • 2023-03-29
    相关资源
    最近更新 更多