cod*_*see 7 java thread-safety
Java代码:
public class IncreaseTest {
public static int value = 0;
public synchronized int increment() {
return value++;
}
}
Run Code Online (Sandbox Code Playgroud)
方法increment()线程安全吗?我是否必须添加modifier关键字 volatile,如下所示:
public static volatile int value = 0;
Run Code Online (Sandbox Code Playgroud)
Mar*_*eel 22
此代码不是线程安全的.实例方法将在实例上同步,如果您有多个实例,则它们将不使用相同的监视器,因此更新可以交错.
您需要从value字段中删除静态或向increment()方法添加静态.
此外,正如您value公开的那样,还有一个问题是,如果不使用可能导致读取旧值的同步,则可以在此方法之外更改或读取值.
因此,将代码更改为以下内容将使其成为线程安全的:
public class IncreaseTest {
private int value = 0;
public synchronized int increment() {
return value++;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7532 次 |
| 最近记录: |