1. 自旋锁成品代码如下:
package lock.spinlock;import java.util.concurrent.TimeUnit;import java.util.concurrent.atomic.AtomicReference;/** * @author wuyiccc * @date 2020/7/19 10:37 * 岂曰无衣,与子同袍~ */public class SpinLock { private AtomicReference<Thread> sign = new AtomicReference<>(); public void lock() { Thread current = Thread.currentThread(); while (!sign.compareAndSet(null, current)) { System.out.println("获取自旋锁失败,再次尝试"); } } public void unlock() { Thread current = Thread.currentThread(); sign.compareAndSet(current, null); } public static void main(String[] args) { SpinLock lock = new SpinLock(); Runnable runnable = new Runnable() { @Override public void run() { System.out.println(Thread.currentThread().getName() + "开始尝试获取自旋锁..."); lock.lock(); System.out.println(Thread.currentThread().getName() + "获取自旋锁胜利..."); try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } finally { System.out.println(Thread.currentThread().getName() + "开释了自旋锁..."); lock.unlock(); } } }; Thread t1 = new Thread(runnable, "线程1"); Thread t2 = new Thread(runnable, "线程2"); t1.start(); t2.start(); }}
2. 外围代码解说