`

Lock的实现原理

阅读更多
两种加锁方式:

Synchronized(obj){do logic}:尝试获取obj的锁,如果无法获取则阻塞等待;

Lock:它的实现原理和Synchronized完全不同,它使用compare and swap理念,如果符合cas判定逻辑,那么就修改state状态,把当前线程设定为独占,具体代码为:
        /**
         * Performs lock.  Try immediate barge, backing up to normal
         * acquire on failure.
         */
        final void lock() {
            if (compareAndSetState(0, 1))
                setExclusiveOwnerThread(Thread.currentThread());
            else
                acquire(1);
        }


无法获取锁的话,那么就:
    public final void acquire(int arg) {
        if (!tryAcquire(arg) &&
            acquireQueued(addWaiter(Node.EXCLUSIVE), arg))
            selfInterrupt();
    }


但是为啥tryAcquire直接抛出异常说UnsupportedOperationException呢,不明白
    protected boolean tryAcquire(int arg) {
        throw new UnsupportedOperationException();
    }


Lock很重要的一个方面是它可以tryLock,试图获取不成的话可以不用阻塞,Synchronized的话那就等吧,等着cpu调度到你这个线程,你就可以做事了。

AtomicInteger实现原子性的原理如下:
    /**
     * Atomically increments by one the current value.
     *
     * @return the updated value
     */
    public final int incrementAndGet() {
        for (;;) {
            int current = get();
            int next = current + 1;
            if (compareAndSet(current, next))
                return next;
        }
    }


一、get()获取的是本地private volatile int value,这样保证可见性;
二、如果内存中的值是current,则设置为next
三、如果if (compareAndSet(current, next))返回false,看到for (;;)了吗?其他线程修改完了不就等到我了吗,O(∩_∩)O哈哈~


分享到:
评论

相关推荐

    synchronized和LOCK的实现原理深入JVM锁机制比较好.docx

    了解 JVM 锁机制中的 synchronized 和 Lock 实现原理 在 Java 中,锁机制是数据同步的关键,存在两种锁机制:synchronized 和 Lock。了解这两种锁机制的实现原理对于理解 Java 并发编程非常重要。 synchronized 锁...

    Java synchronized关键字和Lock接口实现原理

    Java synchronized关键字和Lock接口实现原理 Java 中的 synchronized 关键字和 Lock 接口是两种常用的线程同步机制,它们都可以用来解决并发问题。下面我们将详细介绍 synchronized 关键字和 Lock 接口的实现原理。...

    java的Lock锁原理详解.docx

    在实际开发中,为了保证线程安全和避免死锁,通常会使用已有的Lock实现,如ReentrantLock,因为它们经过了严格的测试和优化,性能和安全性都更有保障。 总之,synchronized和Lock是Java中两种不同的锁机制,各有优...

    看看C#中用lock关键实现同步的原理

    看看C#中用lock关键实现同步的原理, 虽然不长,但是很有用

    彻底搞清楚library cache lock的成因和解决方法

    为了更好地理解“Library cache lock”的工作原理,我们需要了解 Oracle 数据库是如何管理 SQL 和 PL/SQL 对象的。每当 SQL 语句或 PL/SQL 代码被编译并加载到内存时,它们会被存储在共享池中的 library cache 区域...

    Java并发机制的底层实现原理.pdf

    Java并发机制的底层实现原理涉及到多个方面,包括了本地内存与线程安全的问题、volatile关键字的使用、synchronized关键字的原理以及Java并发在处理器层面是如何实现的。通过这些机制,Java能够有效地管理多线程环境...

    Select函数实现原理分析

    ### Select函数实现原理深入解析 #### 一、Select函数概览与作用 `select`函数是一种多路复用技术中的核心组件,在操作系统中扮演着重要的角色。它允许一个进程同时监控多个文件描述符,一旦这些文件描述符中有...

    lock4j高性能分布式锁 v2.2.6.zip

    本文将深入探讨lock4j 2.2.6版本的设计原理、实现机制以及其在实际应用中的优势。 一、lock4j概述 lock4j是一款开源的Java分布式锁框架,它的核心目标是解决在分布式环境下对共享资源进行同步访问的问题。通过lock4...

    记录redisson实现redis分布式事务锁

    Redisson的分布式锁通过`RLock`接口提供,它实现了Lock接口,包含了常规锁的基本功能,如`lock()`, `unlock()`等。 在使用Redisson实现分布式锁时,我们需要创建一个RedissonClient实例,这通常在Spring Boot应用中...

    ReentrantLock 实现原理 1

    ReentrantLock 实现原理详解 ReentrantLock 是 Java 中的一个同步工具类,它实现了 Lock 接口,提供了锁的获取和释放机制。ReentrantLock 的实现原理基于 AQS(AbstractQueuedSynchronizer),是一个重入锁,允许一...

    linux下实现高性能读写锁(read/write lock)

    下面将详细讲解读写锁的工作原理、特性以及如何在Linux下实现。 首先,了解读写锁的基本概念: 1. **读锁(Read Lock)**:当多个线程尝试获取读锁时,它们可以并行访问共享资源,因为读操作通常不改变数据状态。...

    Lock锁的底层原理完整版

    此外,Lock接口还有一个带条件的锁——Condition接口的实现类ReentrantLock。这种带条件的锁使得线程可以在一定条件下挂起等待,直到其它线程唤醒它。 在实际使用场景中,例如多个用户同时操作一个银行账户的情况,...

    android 自定义锁屏实现原理

    Android 自定义锁屏实现原理 Android 自定义锁屏是指在 Android 系统中,开发者可以根据自己的需求,设计和实现一个自定义的锁屏界面,以满足不同的应用场景。下面是 Android 自定义锁屏的实现原理。 锁屏服务的...

    Lock的使用.rar

    3. **Lock的工作原理** 当一个线程进入`lock`块时,它会尝试获取对锁对象的独占所有权。如果成功,它将执行代码块,其他线程在锁被释放之前无法进入。一旦线程完成代码块的执行,它会释放锁,允许其他等待的线程...

    LockService,安卓6.0.zip

    本篇将深入探讨LockService的原理、使用方法以及在Android 6.0中的新特性。 1. **LockService基础** LockService是Android开放源代码项目的一部分,它提供了一种接口,让开发者能够创建自己的锁屏应用。通过实现...

    android一键锁屏实现原理

    以上就是关于“android一键锁屏实现原理”的详细解释,通过理解设备管理器的机制和权限控制,开发者可以为用户提供便捷的设备管理功能。在实际项目中,可以根据需求扩展和优化这个过程,例如添加动画效果、自定义...

    并发容器之ArrayBlockingQueue和LinkedBlockingQueue实现原理详解

    "并发容器之ArrayBlockingQueue和LinkedBlockingQueue实现原理详解" ArrayBlockingQueue和LinkedBlockingQueue是Java并发容器中两个常用的阻塞队列实现,分别基于数组和链表存储元素。它们都继承自AbstractQueue类...

    Java 读写锁实现原理浅析

    "Java 读写锁实现原理浅析" Java 读写锁实现原理浅析是 Java 并发编程中一个非常重要的主题。在多线程编程中,读写锁是解决读写并发问题的常用机制。本文主要介绍了 Java 读写锁实现原理浅析,包括读写锁的定义、...

Global site tag (gtag.js) - Google Analytics