2019-08-16-锁的分类

2019-08-16  本文已影响0人  王元

锁的分类:

一,线程是否需要锁住同步资源

广义角度上的概念,对于同一个数据的并发操作下

这里涉及到一个原子类AtomicInteger的CAS算法实现,具体可以看这篇文章AtomicInteger实现原理

方式一

private ReentrantLock lock = new ReentrantLock();
private void doLock() {
    //尝试获取锁
    lock.lock();
    //doSomeThing();
    lock.unlock();
    //执行完unLock释放锁
}

方式二

private Object syncLock = new Object();
private void syncLock() {
    //尝试获取锁
    synchronized (syncLock) {
        doSomeThing();
    }
    //执行完同步块,自动释放锁
}

二,锁住同步资源,线程是否需要阻塞

介绍自旋锁之前,我们先说明一个概念,Java线程的阻塞和唤醒,都是需要操作系统来切换CPU状态来实现的,这种状态切换需要耗费处理器时间,如果同步块的操作的内容过于简单,状态转换的耗时可能比执行操作的时间更长

三,多个线程竞争同步资源的流程细节有没有区别

这四种锁是指锁的状态,专门针对synchronized的
首先为什么Synchronized能实现线程同步?

所以目前锁一共有4种状态,级别从低到高依次是:无锁、偏向锁、轻量级锁和重量级锁。锁状态只能升级不能降级。

四,多个线程竞争资源要不要排队

如上可以看出该方法主要做一件事情:主要是判断当前线程是否位于同步队列中的第一个。如果是则返回true,否则返回false。

综上,公平锁就是通过同步队列来实现多个线程按照申请锁的顺序来获取锁,从而实现公平的特性。非公平锁加锁时不考虑排队等待问题,直接尝试获取锁,所以存在后申请却先获得锁的情况。

五,一个线程中的多个流程能否获得同一把锁

六,多个线程能否共享一把锁

参考文章

其他文章

上一篇 下一篇

猜你喜欢

热点阅读