java - 整数值不会每次都增加
问题描述
我声明了一个 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);
}
解决方案
你能告诉我为什么不是静态值或只有 int 不起作用。
因为 Java 内存模型。
如果一个线程写入一个变量而另一个线程读取该变量,那么保证第二个线程看到第一个线程写入的值的唯一方法是:
- 将变量声明为 a
volatile
, - 同步两个线程,或者
- 使用线程安全类替换裸变量;例如一个
AtomicInteger
. 变量应该是final
。
您需要阅读 Oracle 并发教程,特别是有关同步的部分:
推荐阅读
- ios - 如何让 App Store Reviewers 使用 Stripe 测试 App?
- c# - 用字典创建交叉表结构
- python - 使用 tplquad 对具有 3 个以上参数的函数进行三重积分
- bash - 如何处理文件夹结构中与模式匹配的所有文件?
- project-reactor - 如何使 expectComplete() 事件失败并抛出错误?
- java - 如何从存储过程获取多个结果列表到 Spring Boot 端
- mongoose - 如何使用项目删除已填充文档的文件
- actionscript-3 - 让秒针在倒数计时器上旋转而不是滴答作响
- apache-spark - Spark集群模式下如何处理日志
- r - 满足条件如何保留一行并删除其他行