Lock

Lock的初步使用:

ReentrantLock:重入锁,在一个线程中,调用两次lock方法,第一次是通过阻塞等待获取锁,第二次增加重试次数后,直接获取锁。

ReentrantReadWriteLock:原理:有两个锁:读锁和写锁,特点:若线程1获取读锁,线程2仍可以获取读锁,其他3种情况都不可以。应用场景:读写锁性能高于排他锁,原因:大部分场景是读多于写。

Lock和synchronized 的对比

1  语法:Lock是类,synchronized 是关键字

2  使用:Lock锁的释放是主动的,synchronized 是jvm释放的,被动的

3  功能:Lock有公平锁和非公平锁;synchronized 只有非公平锁

AQS(AbstractQueuedSynchronizer的简写):提供锁实现先进先出的框架

独占锁:ReentrantLock

共享锁:ReentrantReadWriteLock

内部实现:是一个先进先出的双向链表结构

compareAndSetState(CAS):

        使用乐观锁(先判断期待值是否和实际值相等,若相等则更新,若不等,则失败)

         对象的tail节点在内存的位置:当前对象+tail实例变量的偏移量,然后通过内存地址实现对tail节点的操作

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 摘要: 我们已经知道,synchronized 是Java的关键字,是Java的内置特性,在JVM层面实现了对临界...
    kingZXY2009阅读 1,846评论 0 20
  • 技术点: 1.线程与进程: 在开始之前先把进程与线程进行区分一下,一个程序最少需要一个进程,而一个进程最少需要一个...
    尼小摩阅读 7,089评论 0 31
  • 我们已经知道,synchronized 是java的关键字,是Java的内置特性,在JVM层面实现了对临界资源的同...
    valor_wang阅读 393评论 0 1
  • 从Java 5之后,在java.util.concurrent.locks包下提供了另外一种方式来实现同步访问,那...
    薛晨阅读 710评论 1 5
  • 要有多大的勇气 才能面对你字字诛心的指责 乞求般的说出别离开我 伤害都是互相的 不是吗 为什么要这样恶意的揣测别人...
    江南阿酒阅读 280评论 0 1