自旋锁释义
是指尝试获取锁的线程不会立即阻塞,而是采用循环的方式去尝试获取锁, 优点:减少线程上下文切换的消耗, 缺点:循环会消耗CPU
代码Demo
package com.interview.study.thread;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicReference;
/**
* @author zhangchaocai
* @create 2020-04-17 14:29
*/
public class SpinLockDemo {
//原子引用线程
AtomicReference<Thread> atomicReference = new AtomicReference<>();
public void mylock(){
Thread thread = Thread.currentThread();
System.out.println(Thread.currentThread().getName() + "\t come in ");
while (!atomicReference.compareAndSet(null,thread)){
}
}
public void myunlock(){
Thread thread = Thread.currentThread();
atomicReference.compareAndSet(thread,null);
System.out.println(Thread.currentThread().getName() + "\t invoked myUnLock");
}
public static void main(String[] args) {
SpinLockDemo spinLockDemo = new SpinLockDemo();
new Thread(() -> {
spinLockDemo.mylock();
try{
TimeUnit.SECONDS.sleep(5);
}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();
}
}
运行结果