美文网首页技术栈
2019-04-21——Java并发包 锁 Lock

2019-04-21——Java并发包 锁 Lock

作者: 烟雨乱平生 | 来源:发表于2019-04-21 17:20 被阅读0次

synchronized 是Java的关键字,是Java的内置特性,在JVM层面实现了对临界资源的同步互斥访问,但 synchronized 粒度有些大,在处理实际问题时存在诸多局限性,比如响应中断等。Lock 提供了比 synchronized更广泛的锁操作,它能以更优雅的方式处理线程同步问题。

Lock和synchronized的区别

  • Lock不是Java语言内置的,Lock是一个类,通过这个类可以实现同步访问;synchronized是Java语言的关键字,因此是内置特性。

  • Lock和synchronized有一点非常大的不同,采用synchronized不需要用户去手动释放锁,当synchronized方法或者synchronized代码块执行完之后,系统会自动让线程释放对锁的占用;而Lock则必须要用户去手动释放锁,如果没有主动释放锁,就有可能导致出现死锁现象。

Lock提供的方法

  • 获取锁的方法
方法 描述
lock() 用来获取锁,如果锁已被其他线程获取,则进行等待。
tryLock() 表示用来尝试获取锁,如果获取成功,则返回true,如果获取失败(即锁已被其他线程获取),则返回false,也就说这个方法无论如何都会立即返回。在拿不到锁时不会一直在那等待。
tryLock(long time, TimeUnit unit) 和tryLock()方法是类似的,只不过区别在于这个方法在拿不到锁时会等待一定的时间,在时间期限之内如果还拿不到锁,就返回false。如果如果一开始拿到锁或者在等待期间内拿到了锁,则返回true。
lockInterruptibly() 通过这个方法去获取锁时,如果线程正在等待获取锁,则这个线程能够响应中断,即中断线程的等待状态。
  • 释放锁的方法
方法 描述
unlock() 释放锁

ReentrantLock

ReentrantLock,即可重入锁。ReentrantLock是唯一实现了Lock接口的类。


相关文章

网友评论

    本文标题:2019-04-21——Java并发包 锁 Lock

    本文链接:https://www.haomeiwen.com/subject/gnrjgqtx.html