运用同步代码段、同步方法和同步锁的方法实现线程同步
时间: 2023-11-27 18:53:42 浏览: 36
线程同步是为了保证多个线程访问共享资源时的安全性,避免出现数据竞争等问题。以下是三种常用的线程同步方法:
1. 同步代码段
通过 synchronized 关键字来实现同步代码段,即在多线程访问共享资源的代码块中添加 synchronized 关键字。当一个线程进入同步代码块时,其他线程必须等待该线程执行完毕才能进入。
示例代码:
```
public class SyncDemo {
private int count = 0;
public void increment() {
synchronized (this) {
count++;
}
}
public int getCount() {
return count;
}
}
```
2. 同步方法
可以将需要同步的方法声明为 synchronized,当一个线程进入该方法时,其他线程必须等待该线程执行完毕才能进入。
示例代码:
```
public class SyncDemo {
private int count = 0;
public synchronized void increment() {
count++;
}
public synchronized int getCount() {
return count;
}
}
```
3. 同步锁
通过 Lock 接口及其实现类实现同步锁,Lock 接口提供了比 synchronized 更为灵活的锁操作。在访问共享资源前,需要获取锁,访问完成后再释放锁。
示例代码:
```
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class SyncDemo {
private int count = 0;
private Lock lock = new ReentrantLock();
public void increment() {
lock.lock();
try {
count++;
} finally {
lock.unlock();
}
}
public int getCount() {
return count;
}
}
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)