写一个通用的java自旋锁工具类
时间: 2024-03-16 22:42:47 浏览: 28
下面是一个通用的Java自旋锁工具类的实现,它可以用于多线程环境下对共享资源的访问控制:
```
import java.util.concurrent.atomic.AtomicBoolean;
public class SpinLock {
private AtomicBoolean locked = new AtomicBoolean(false);
public void lock() {
while (!locked.compareAndSet(false, true)) {
// 自旋等待
}
}
public void unlock() {
locked.set(false);
}
}
```
在上面的代码中,使用AtomicBoolean类来表示锁是否被占用。当一个线程想要获取锁时,它会进行忙循环,直到调用compareAndSet方法将locked变量从false设置为true成功,然后获取锁。在释放锁时,将locked变量设置为false。
使用该自旋锁工具类时,只需要在需要对共享资源进行访问控制的代码块中调用lock和unlock方法即可,例如:
```
SpinLock lock = new SpinLock();
// ...
lock.lock();
try {
// 访问共享资源的代码块
} finally {
lock.unlock();
}
```
需要注意的是,自旋锁可能导致死循环,因此需要合理地设置自旋次数或使用其他锁机制来避免这种情况。同时,自旋锁适用于锁竞争不激烈、锁持有时间短的情况下,需要根据具体情况进行权衡和选择。
相关推荐
![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_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)
![](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)