public class VolatileExample {
private volatile boolean initialized = false;
private final Object lock = new Object();
// 初始化资源的方法
public void initialize() {
synchronized (lock) {
// 模拟资源初始化的过程
// ...
initialized = true; // 标记资源已初始化
}
}
// 检查资源是否已初始化的方法
public boolean isInitialized() {
return initialized; // 直接读取volatile变量,确保可见性
}
public static void main(String[] args) {
VolatileExample example = new VolatileExample();
// 在另一个线程中初始化资源
new Thread(() -> {
example.initialize();
System.out.println("Resource initialized!");
}).start();
// 在主线程中检查资源是否已初始化
while (!example.isInitialized()) {
// 等待资源初始化完成
// 由于使用了volatile修饰initialized变量,因此可以确保这里的循环能够及时检测到变量的变化
}
System.out.println("Resource is now initialized and can be used!");
}
}
volatile(保证其他线程改了立马能看到,但不保证并发安全操作原子性。)
于 2024-11-16 12:30:20 首次发布