技术栈

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

2019-04-21  本文已影响0人  烟雨乱平生

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

Lock和synchronized的区别

Lock提供的方法

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

ReentrantLock

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


上一篇 下一篇

猜你喜欢

热点阅读