Java中的Lock

时间:2022-09-02 13:56:26

  同步机制是Java并发编程中最重要的机制之一,锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能防止多个线程同时访问共享资源(但是也有例外,比如读写锁)。Java中可以使用synchronized关键字实现锁的功能,用synchronized修饰的方法或者代码块,在锁和获取和释放时隐式的,这给我们的操作带来了更好的便捷性。Lock接口是JAVA SE 5之后新增的接口,它提供了与synchronized关键字类似的同步功能,只是在使用的时候需要显示的获取锁和释放锁,但是却拥有了锁释放和锁获取的可操作性、可中断的获取锁以及超时获取锁等多种synchronized关键字所不具备的同步特性。

  synchronized关键字隐式的获取与释放锁将锁的获取与释放固化了,这种方式简化了同步的管理,但是可扩展性没有显示的锁获取与释放更方便,例如,在一个场景中,先获得锁A,然后再获取锁B,当锁B获得后,释放锁A同时获取锁C,当锁C获得后,再释放B的同时据偶去锁B,一次类推。这样的场景下,synchronized关键字就没有那么容易实现了,而使用Lock却非常的方便。

  Lock的使用非常的简单,下面是Lock的使用方式示例 :

Lock lock = new ReentrantLock() ;
lock.lock() ;
try{
//do something }finally{
lock.unlock() ;
}

  在finally块中释放锁,能保证在每次获取锁之后,最终都能被释放。要注意的是,不要将锁的获取写在try块中,因为如果在获取锁(自定义锁的实现)时发生了异常,异常抛出的同时,也会导致锁无故的释放。

  Lock接口对于synchronized的优势主要有以下几点 :

  (1)尝试非阻塞的获取锁     ,当前线程尝试获取锁,如果这一时刻没有被其他线程获取到,则成功获取并持有锁

  (2)能被中断的获取锁       ,我们知道synchronized关键字修饰的代码块或者方法,阻塞队列中的线程是不会响应中断的。Lock则不同,获取到锁的线程被中断时,中断异常会被抛出,同时释放锁。

  (3)超时释放锁,在指定的截止时间之前获取锁,如果超时未获取到,则返回 。

  Lock是一个接口,它定义了锁获取与释放的基本操作,Lock的API如下 :

Java中的Lock

  

Java中的Lock的更多相关文章

  1. Java中的Lock与synchronized

    并发编程学习笔记之Lock与synchronized 一.什么是可重入锁 Lcok在Java中是一个接口,一般在面试问题中问到的可能是ReentrantLock与synchronized的区别.Ree ...

  2. 从源码浅析Java中的Lock和AbstractQueuedSynchronizer

    在之前的文章中我也曾经介绍过Lock,像ReentrantLock(可重入锁)和ReentrantReadWriteLock(可重入读写锁),这些所我们在说的时候并没有详细的说明它们的原理,仅仅说明了 ...

  3. Java中的Lock锁

    Lock锁介绍: 在java中可以使用 synchronized 来实现多线程下对象的同步访问,为了获得更加灵活使用场景.高效的性能,java还提供了Lock接口及其实现类ReentrantLock和 ...

  4. Java中的Lock接口

    Synchronized & Lock synchronized 是Java语言中的关键字,由monitorenter,monitorexit两个指令实现.JVM会将monitorenter指 ...

  5. 【原创】关于java中的lock

    看了下java中高性能锁Lock,其中有如下: ReentrantLock:独占锁,类似于synchronized,不过锁的粒度更小 ReadWriteLock(ReentrantReadWriteL ...

  6. Java 并发:Lock 框架详解

    摘要: 我们已经知道,synchronized 是java的关键字,是Java的内置特性,在JVM层面实现了对临界资源的同步互斥访问,但 synchronized 粒度有些大,在处理实际问题时存在诸多 ...

  7. JAVA中synchronized和lock详解

         目前在Java中存在两种锁机制:synchronized和Lock,Lock接口及其实现类是JDK5增加的内容,其作者是大名鼎鼎的并发专家Doug Lea.本文并不比较synchronize ...

  8. JAVA中LOCK

    原文链接:http://www.cnblogs.com/dolphin0520/p/3923167.html 一.synchronized的缺陷 我们知道如果一个代码块被synchronized修饰了 ...

  9. Java中Lock,tryLock,lockInterruptibly的区别

    转载自:https://www.zhihu.com/question/36771163/answer/68974735 ReentrantLock 锁有好几种,除了常用的lock ,tryLock , ...

随机推荐

  1. Web安全之CSRF攻击

    CSRF是什么? CSRF(Cross Site Request Forgery),中文是跨站点请求伪造.CSRF攻击者在用户已经登录目标网站之后,诱使用户访问一个攻击页面,利用目标网站对用户的信任, ...

  2. 思考之一——PM(Project Manager)

    摘自:http://blog.csdn.net/moreevan/article/details/6697806

  3. java异步操作实例

    1.异步操作过程实例: A.开启一个线程一直执行耗时操作 B.通过每隔多长多件轮询线程是否实行完毕,thread.isCompleted() C.执行完毕后,通过回调函数返回真实信息 一个调用者在调用 ...

  4. c语言 字符版 简易2048

    花了两个多小时,用最蠢的方法写的……最简陋版…… 还不确定这么写逻辑对不对…… #include <iostream> #include <cstdio> #include & ...

  5. innosetup 安装静默安装msi,指定安装路径的方法

    自己看了很久帮助,分号的用法确实不太好用,湿了这个东东估计很多人会用到,发出来给大家参考. Filename: "{app}/msiexec.exe";Parameters: &q ...

  6. Android 各版本信息 (*)

    The following tables show the release dates and key features of all Android operating system updates ...

  7. G - RPG的错排(错排)

    Description 今年暑假杭电ACM集训队第一次组成女生队,其中有一队叫RPG,但做为集训队成员之一的野骆驼竟然不知道RPG三个人具体是谁谁.RPG给他机会让他猜猜,第一次猜:R是公主,P是草儿 ...

  8. 回溯法、数独与N阶可达问题

    回溯法是剪了枝的穷举,这是字面上的说法,不太好理解,不如讲解实例来的酸爽,于是引出了N阶可达问题: 有N个国家,每个国家有若干城市,小明要从中国(任意一个城市)出发,遍历所有国家(假设这个遍历顺序已经 ...

  9. Java中的增强 for 循环 foreach

    foreach 是 Java 中的一种语法糖,几乎每一种语言都有一些这样的语法糖来方便程序员进行开发,编译期间以特定的字节码或特定的方式来对这些语法进行处理.能够提高性能,并减少代码出错的几率.在 J ...

  10. 一个大数据方案:基于Nutch&plus;Hadoop&plus;Hbase&plus;ElasticSearch的网络爬虫及搜索引擎

    网络爬虫架构在Nutch+Hadoop之上,是一个典型的分布式离线批量处理架构,有非常优异的吞吐量和抓取性能并提供了大量的配置定制选项.由于网络爬虫只负责网络资源的抓取,所以,需要一个分布式搜索引擎, ...