java 多线程 int,java – 使用volatile int的多线程中的兴趣案例
时间: 2023-07-09 08:24:33 浏览: 55
好的,关于Java多线程中使用volatile int的兴趣案例,我可以给你举一个例子:
假设有一个线程A和一个线程B,它们都要对一个共享的int类型变量进行读取和写入操作,代码如下:
```java
public class Main {
private static volatile int sharedInt = 0;
public static void main(String[] args) {
Thread threadA = new Thread(() -> {
while (sharedInt == 0) {
// do something
}
System.out.println("sharedInt has been changed to " + sharedInt);
});
Thread threadB = new Thread(() -> {
sharedInt = 1;
System.out.println("sharedInt has been changed to " + sharedInt);
});
threadA.start();
threadB.start();
}
}
```
在上面的代码中,线程A会一直循环等待直到sharedInt的值不再为0,然后输出sharedInt的值;线程B会将sharedInt的值修改为1。
如果在上面的代码中,我们没有使用volatile修饰sharedInt,那么线程A在读取sharedInt时可能会出现缓存一致性问题,导致一直无法读取到线程B修改后的值,导致线程A一直处于死循环中。
但是,如果我们使用了volatile修饰sharedInt,那么线程A就能够读取到线程B修改后的值,从而正常结束循环。
这就是使用volatile int的多线程中的兴趣案例。需要注意的是,volatile仅能保证可见性和有序性,但不能保证原子性,如果需要保证原子性,需要使用synchronized或者AtomicInteger等线程安全的数据结构。