强引用:强引用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());}
}
读锁是共享的不互斥,写锁是互斥的独占的。