package com.atguigu.boot.com.atguigu; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; public class SpinLockDemo { //原子引用线程 AtomicReference<Thread> atomicReference=new AtomicReference<>(); public void myLock(){ Thread thread = Thread.currentThread(); System.out.println(Thread.currentThread().getName()+"\t come in myLockO(∩_∩)O"); // while(!atomicReference.compareAndSet(null,thread)){ // System.out.println(""); // } do{ //System.out.println(Thread.currentThread().getName()+"线程正在尝试获取"); // try { // TimeUnit.SECONDS.sleep(1); // } catch (InterruptedException e) { // e.printStackTrace(); // } }while(!atomicReference.compareAndSet(null,thread)); } public void myUnLock(){ Thread thread = Thread.currentThread(); System.out.println(Thread.currentThread().getName()+"\t come in myUnLockO(∩_∩)O"); atomicReference.compareAndSet(thread,null); } public static void main(String[] args) { SpinLockDemo spinLockDemo=new SpinLockDemo(); new Thread(()->{ spinLockDemo.myLock(); try { TimeUnit.SECONDS.sleep(3); } catch (InterruptedException e) { e.printStackTrace(); } spinLockDemo.myUnLock(); },"AA").start(); try { TimeUnit.SECONDS.sleep(1) ; } catch (InterruptedException e) { e.printStackTrace(); } new Thread(()->{ spinLockDemo.myLock(); try { TimeUnit.SECONDS.sleep(1) ; } catch (InterruptedException e) { e.printStackTrace(); } spinLockDemo.myUnLock(); },"BB").start(); } }
package com.atguigu.boot.com.atguigu;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicReference;
public class SpinLockDemo {
//原子引用线程
AtomicReference<Thread> atomicReference=new AtomicReference<>();
public void myLock(){
Thread thread = Thread.currentThread();
System.out.println(Thread.currentThread().getName()+"\t come in myLockO(∩_∩)O");
// while(!atomicReference.compareAndSet(null,thread)){
// System.out.println("");
// }
do{
//System.out.println(Thread.currentThread().getName()+"线程正在尝试获取");
// try {
// TimeUnit.SECONDS.sleep(1);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
}while(!atomicReference.compareAndSet(null,thread));
}
public void myUnLock(){
Thread thread = Thread.currentThread();
System.out.println(Thread.currentThread().getName()+"\t come in myUnLockO(∩_∩)O");
atomicReference.compareAndSet(thread,null);
}
public static void main(String[] args) {
SpinLockDemo spinLockDemo=new SpinLockDemo();
new Thread(()->{
spinLockDemo.myLock();
try {
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException e) {
e.printStackTrace();
}
spinLockDemo.myUnLock();
},"AA").start();
try {
TimeUnit.SECONDS.sleep(1) ;
} catch (InterruptedException e) {
e.printStackTrace();
}
new Thread(()->{
spinLockDemo.myLock();
try {
TimeUnit.SECONDS.sleep(1) ;
} catch (InterruptedException e) {
e.printStackTrace();
}
spinLockDemo.myUnLock();
},"BB").start();
}
}
原文:https://www.cnblogs.com/ffzzcommsoft/p/14722643.html