synchronized和volatile的用法
时间: 2023-05-29 11:06:16 浏览: 121
synchronized和volatile是Java中用于多线程编程的关键字,它们的用法如下:
1. synchronized
synchronized用于保证多个线程访问共享资源时的线程安全,它有两种用法:
(1) 同步方法:将方法声明为synchronized,可以保证同一时刻只有一个线程可以访问该方法。
```java
public synchronized void method() {
// 该方法的代码只有一个线程可以执行
}
```
(2) 同步代码块:将需要同步的代码块用synchronized包围起来,可以保证在同一时刻只有一个线程可以执行该代码块。
```java
public void method() {
synchronized(this) {
// 该代码块的代码只有一个线程可以执行
}
}
```
2. volatile
volatile用于保证多个线程访问共享变量时的可见性,即当一个线程修改了共享变量的值时,其他线程能够立即看到该变量的最新值。volatile有如下用法:
(1) 修饰变量:将需要保证可见性的变量声明为volatile。
```java
public volatile int count;
```
(2) 禁止指令重排序:在多线程环境下,JVM可能会对代码进行指令重排序,而volatile可以禁止指令重排序。
```java
public volatile int count;
public void method() {
count = 1;
// 禁止指令重排序
synchronized(this) {
// 该代码块的代码只有一个线程可以执行
}
}
```
阅读全文