java自旋锁的 概念及示例代码
时间: 2024-05-11 16:16:33 浏览: 129
Java自旋锁是一种等待锁的方式,在多线程并发情况下可以避免线程频繁地切换。当一个线程请求锁的时候,如果该锁被其他线程占用,则该线程不会立即被阻塞,而是假装一直占有着CPU在等待锁的释放,这个过程就称为自旋。自旋的好处在于减少线程切换的开销,使得被阻塞的线程能更快地获取到锁。
下面是一个简单的Java自旋锁示例代码:
```
import java.util.concurrent.atomic.AtomicReference;
public class SpinLock {
private AtomicReference<Thread> owner = new AtomicReference<>();
public void lock() {
Thread currentThread = Thread.currentThread();
//自旋获取锁
while (!owner.compareAndSet(null, currentThread)) {
}
}
public void unlock() {
Thread currentThread = Thread.currentThread();
owner.compareAndSet(currentThread, null);
}
}
```
在上面的代码中,自旋锁的核心是AtomicReference类,它可以保证在并发情况下的原子性操作。当一个线程需要获取锁时,通过compareAndSet方法来CAS操作,如果返回值为true表示成功获取锁,否则就一直自旋等待锁的释放。当线程释放锁时,再次通过compareAndSet方法来释放锁。
阅读全文