强引用,弱引用,软引用,虚引用,自旋锁,读写锁

发布于:2025-04-07 ⋅ 阅读:(29) ⋅ 点赞:(0)

强引用:强引用GC不会回收
软引用:内存够的话不回收,内存不够的话回收
弱引用:不管内存够不够,只要有GC就回收
虚引用:点get是null,但是GC后他会把引用放到引用队列里边
自旋锁:是指尝试获取锁的线程不会立即阻塞,而是采用循环的方式去尝试获取锁,这样的好处是减少线程上下文切换的消耗,缺点是循环会消耗CPU。

public class SpinLockDemo {
    //原子引用线程
    AtomicReference<Thread> atomicReference=new AtomicReference<>();
    public static void main(String[] args) throws InterruptedException {
        SpinLockDemo spinLockDemo=new SpinLockDemo();
        new Thread(()->{
            spinLockDemo.myLock();
            try {
                TimeUnit.SECONDS.sleep(5);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            spinLockDemo.myUnLock();

        },"aa").start();
        new Thread(()->{
            spinLockDemo.myLock();
            try {
                TimeUnit.SECONDS.sleep(5);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            spinLockDemo.myUnLock();
        },"bb").start();

    }
    public void myLock(){
        Thread thread=Thread.currentThread();
        System.out.println(Thread.currentThread());
        while (!atomicReference.compareAndSet(null,thread)){

        }
    }
    public void myUnLock(){
        Thread thread=Thread.currentThread();
        atomicReference.compareAndSet(thread,null);
        System.out.println(Thread.currentThread());
    }
}

读锁是共享的不互斥,写锁是互斥的独占的。


网站公告

今日签到

点亮在社区的每一天
去签到