首页 > 编程语言 > 详细

java锁

时间:2021-07-02 09:32:39      阅读:26      评论:0      收藏:0      [点我收藏+]

1.公平锁与非公平锁?

  公平锁:遵循FIFO(先进先出)的原则,先到的线程优先获取资源

  非公平锁:后到的线程有可能先获取到资源

  ReentrantLock,ReentrantReadWriteLock 默认构造都是非公平锁,非公平锁的优点在于吞吐量比公平锁大。synchronized也是非公平锁

2.可重入锁(又名递归锁)?

  指的是同一线程在外层函数获取锁之后,内层递归函数仍然能获取该锁。在同一线程外层方法获取锁时,进入内层方法会自动回去到锁

  ReentrantLock就是一个典型的可重入锁

3.自旋锁(spinLock)?

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

4.手写一个自旋锁?

public class SpinLockDemo {
    private AtomicReference<Thread> atomicReference = new AtomicReference();
    public void lock() {
        Thread thread = Thread.currentThread();
        while (!atomicReference.compareAndSet(null, thread)) { }
        System.out.println(Thread.currentThread().getName()+"--线程invoke lock");
    }
    public void unlock() {
        Thread thread = Thread.currentThread();
        atomicReference.compareAndSet(thread, null);
        System.out.println(Thread.currentThread().getName()+"--线程释放锁");
    }
}

5.独占锁 (写锁) /共享锁 (读锁) /互斥锁?

  独占锁:该锁一次只能被一个线程获取

  共享锁:该锁可以被多个线程持有

  

java锁

原文:https://www.cnblogs.com/zhouxuezheng/p/14961629.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!