自旋锁

自旋锁

是什么?

指尝试获取锁的线程不会立即阻塞,而是采取循环的方式去尝试获取锁,好处就是减少了上下文切换的消耗缺点是会消耗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();
    }

}
全部评论

相关推荐

11-08 16:53
门头沟学院 C++
投票
滑模小马达:第三个如果是qfqc感觉还行,我签的qfkj搞电机的,违约金也很高,但公司感觉还可以,听说之前开过一个试用转正的应届生,仅供参考。
点赞 评论 收藏
分享
11-11 14:21
西京学院 C++
无敌混子大王:首先一点,不管学校层次怎么样,教育经历放在第一页靠上位置,第一页看不到教育经历,hr基本直接扔掉了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务