自旋锁

自旋锁

是什么?

指尝试获取锁的线程不会立即阻塞,而是采取循环的方式去尝试获取锁,好处就是减少了上下文切换的消耗缺点是会消耗CPU

/*
    手写一个 自旋锁  (基于CAS)
 */
public class juc1{

    //原子引用线程
    AtomicReference atomicReference = new AtomicReference<Thread>();

    public void mylock(){

        Thread thread = Thread.currentThread();
        System.out.println(thread.getName()+"come in ~~");
        //不停尝试获取锁
        //能放进去,就不走循环 放进去 方法返回了true,放进去不走循环加一个反
        while (!atomicReference.compareAndSet(null,thread)){

        }
    }
    public void myUnlock(){

        Thread thread = Thread.currentThread();
        System.out.println(thread.getName()+"\tunlock~~~");
        //将当前线程
        atomicReference.compareAndSet(thread,null);

    }

    public static void main(String[] args) throws InterruptedException {

        juc1 juc1 = new juc1();


        new Thread(()->{
            juc1.mylock();

            try {
                TimeUnit.SECONDS.sleep(5);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            juc1.myUnlock();
        },"t1").start();

        //主线程睡1秒,保证t2在后面执行
        TimeUnit.SECONDS.sleep(1);

        new Thread(()->{
            juc1.mylock();

            try {
                TimeUnit.SECONDS.sleep(5);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            juc1.myUnlock();
        },"t2").start();
    }

}
全部评论

相关推荐

威猛的小饼干正在背八股:挂到根本不想整理
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务