Java高并发高性能编程(多线程,协程,Actor,RxJava、Akka、Reactor)

JAVA-Lock解析-一-Lock

2019-10-10  本文已影响0人  AlanSun2

首先提出个问题,为什么有了 synchronized 还需要 Lock?
因为 synchronized 有时候效率实在太低了。比如对文件的读写,你希望文件写完之后再被读,这时候按 synchronized 的方法,你会对读和写方法都加上锁,这样导致的结果就是,多个读线程读时,也需要获取和释放锁,但我们知道读于读之间时不会冲突的,这也就浪费了资源,效率很低。而且不灵活,synchronized 只能在同意范围内释放,而 Lock 可以在任意范围内释放锁。

什么是锁?
JAVA 官方回答:锁是一种用于控制多个线程对共享资源的访问的工具。

Lock

Lock 代替了synchronized ,它比 synchronized 更灵活,提供了更多获取锁的方法,例如 tryLock(尝试获取锁),tryLock(time),lockInterruptibly,但需要注意的是和 synchronized 不同你需要手动的释放你获取的锁。所有的 Lock 都是悲观锁。

方法 说明
lock 等待知道获取锁
lockInterruptibly 等待直到获取锁或者线程被中断,如果线程已中断则抛出 InterruptedException
tryLock 如果锁可用返回 true,不可用返回 false
tryLock(time, unit) 等待 time 的时间,如果锁可用返回 true,不可用返回 false
unlock 释放锁
newCondition 返回一个 Condition 如果实现类支持该操作

相关类

ReentrantLock,ReentrantReadWriteLock,ReentrantReadWriteLock,StampedLock,CountDownLatch

参考 https://tech.meituan.com/2018/11/15/java-lock.html

上一篇下一篇

猜你喜欢

热点阅读