package chat.util; import java.util.concurrent.atomic.AtomicReference; public class SpinLock { //javaä¸åŽŸå(CAS)æ“作 AtomicReference<Thread> owner = new AtomicReference<>();//æŒæœ‰è‡ªæ—‹é”的线程对象 private int count; public void lock() { Thread cur = Thread.currentThread(); //lock函数将owner设置为当å‰çº¿ç¨‹ï¼Œå¹¶ä¸”预测原æ¥çš„值为空。unlock函数将owner设置为null,并且预测值为当å‰çº¿ç¨‹ã€‚当有第二个线程调用lockæ“作时由于owner值ä¸ä¸ºç©ºï¼Œå¯¼è‡´å¾ªçޝ //一直被执行,直至第一个线程调用unlock函数将owner设置为null,第二个线程æ‰èƒ½è¿›å…¥ä¸´ç•ŒåŒºã€‚ while (!owner.compareAndSet(null, cur)){ } } public void unLock() { Thread cur = Thread.currentThread(); owner.compareAndSet(cur, null); } }