自旋锁

目的:手写自旋锁,要求只有一个线程能够获得锁,获得锁的线程未释放锁前,其余线程一直循环访问

 

package com.motorye.day331_spinLock;

import java.util.concurrent.atomic.AtomicReference;

public class SpinLock {

    AtomicReference<Thread> atomicReference = new AtomicReference<>();

    public void mylock(){
        System.out.println(Thread.currentThread().getName()+"来了");
        Thread thread = Thread.currentThread();
        while (!atomicReference.compareAndSet(null, thread)){}
        System.out.println(Thread.currentThread().getName()+"成功获得锁");
    }
    public void unmylock(){
        System.out.println(Thread.currentThread().getName()+"准备走");
        Thread thread = Thread.currentThread();
        atomicReference.compareAndSet(thread, null);
        System.out.println(Thread.currentThread().getName()+"彻底释放锁");
    }

    public static void main(String[] args) {
        SpinLock spinLock = new SpinLock();
        new Thread(new Runnable() {
                     @Override
                     public void run() {
                         spinLock.mylock();
                         try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); }
                         spinLock.unmylock();
                     }
                 },"aaa").start();

        new Thread(new Runnable() {
            @Override
            public void run() {
                spinLock.mylock();
                spinLock.unmylock();
            }
        },"bbb").start();
    }
}

 

posted @ 2020-03-31 11:04  motorye  阅读(158)  评论(0编辑  收藏  举报