package com.test; import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * 手动写一个自旋锁 * @author renyahui * */ public class SelfCircleLock { //原子引用线程 AtomicReference<Thread> atomicReference=new AtomicReference<Thread>(); public void myLock(){ Thread thread=Thread.currentThread(); System.out.println(thread.getName()+" come in……"); while(!atomicReference.compareAndSet(null, thread)){ //System.out.println("加锁自我旋转中……"); } } public void myUnLock(){ Thread thread=Thread.currentThread(); System.out.println(thread.getName()+" invoke myunlock……"); while(!atomicReference.compareAndSet(thread, null)){ System.out.println("解锁自我旋转中……"); } } public static void main(String[] args) { final SelfCircleLock selfCircle=new SelfCircleLock(); new Thread( new Runnable() { public void run() { selfCircle.myLock(); try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } selfCircle.myUnLock(); } }).start(); try { Thread.sleep(1000); } catch (InterruptedException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } new Thread( new Runnable() { public void run() { selfCircle.myLock(); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } selfCircle.myUnLock(); } }).start(); } }