不积跬步无以至千里,后继才能薄发
Lock接口的实现必须提供和内置锁相同的内存可见性语义,但在加锁语义、调度算法、顺序保证和性能上可以不同。
ReentrantLock
实现了与 synchronized
相同的可重入锁实现,并且在 java1.6
之后性能相差无几。对比 synchronized
,ReentrantLock
实现了可定时、可轮询、可中断的获取锁操作。
注意点:使用 ReentrantLock
必须使用 try-finally
在finally代码块中释放锁。
公平锁保证了后请求锁的线程,会在之前请求锁的线程之后获取到锁,但是这会极大降低性能,因为线程的挂起和恢复需要的cpu周期很长。
非公平锁提供了 插队
的功能,在线程A释放锁,线程B恢复线程的时间中,线程C可以 插队
获取到锁、使用、释放锁,线程B获取到锁的时机没有变化或者略微推延,这样就提高了吞吐量。
可选项: