java - Java 中的 volatile 和线程安全

标签 java multithreading thread-safety race-condition volatile

请举这个非常简单的例子:

volatile int globalVar = 1;

我的话题:

if (globalVar > 0) {
    globalVar--;
}

现在,我必须决定使变量变为 volatile 是否足以防止竞争条件并使该线程安全。

我知道递增和递减不是,但由于前面的条件,我不确定它是否不同。

我认为它仍然不安全,因为它可以按以下顺序执行:

线程 A 检查条件。线程 B 检查条件。 线程 A 递增。线程 B 递增。

我说得对吗?

最佳答案

你是对的。由于您声明的原因,它不是线程安全的。 volatile 确保两个线程都能看到变量的更新值,但不会保护多行代码。

关于java - Java 中的 volatile 和线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17531919/

相关文章:

linux - 什么是非阻塞信号量?

c# - 如果 API 已经是多线程的,您是否需要对调用者进行多线程处理? ASP.Net MVC

python - 向 Python 中的所有线程发送单向消息

.net - 如何使Stack.Pop线程安全

java - Maven 从多个位置扫描警告类型

java - 如何在与Equal和hashcode一致的情况下实现compareTo()方法

android - 在 sqlite (Android) 中锁定数据库或表

C: 如何使这个函数线程安全?

java - 无法从 ActionForm 转换为 AddExpenseForm

java - 我想知道我的代码是否缺少某些内容,或者我是否写错了某些内容