java可见性和原子性
时间: 2024-06-18 12:05:03 浏览: 152
Java中的可见性和原子性是多线程编程中非常重要的概念,主要是为了保证多线程并发执行时数据的正确性和一致性。其中,可见性是指当一个线程修改了共享变量的值时,其他线程能够立即看到这个修改值的结果,而不是看到修改之前的旧值。而原子性则是指一个操作是不可被中断的,即使在多线程环境下也能保证这个操作是一个完整的、不可分割的操作。
以下是Java中可见性和原子性的一些例子:
1. 可见性
(1)使用volatile关键字修饰共享变量,可以保证可见性。如下所示:
```java
public class VisibilityExample {
private volatile boolean flag = false;
public void setFlag() {
flag = true;
}
public void printFlag() {
System.out.println("Flag is " + flag);
}
}
```
(2)使用synchronized关键字保证共享变量的原子操作,同时也保证了可见性。如下所示:
```java
public class VisibilityExample {
private boolean flag = false;
public synchronized void setFlag() {
flag = true;
}
public synchronized void printFlag() {
System.out.println("Flag is " + flag);
}
}
```
2. 原子性
(1)使用synchronized关键字保证共享变量的原子操作。如下所示:
```java
public class AtomicExample {
private int count = 0;
public synchronized void increase() {
count++;
}
}
```
(2)使用Java提供的原子类,如AtomicInteger。如下所示:
```java
public class AtomicExample {
private AtomicInteger count = new AtomicInteger(0);
public void increase() {
count.incrementAndGet();
}
}
```
阅读全文