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()+"\t come in……");
while(!atomicReference.compareAndSet(null, thread)){
//System.out.println("加锁自我旋转中……");
}
}
public void myUnLock(){
Thread thread=Thread.currentThread();
System.out.println(thread.getName()+"\t 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();
}
}