synchronized和reentrantlock比较

 名称

说明

同一线程是否可以获取多次锁

是否公平

性能&使用便捷度

是否响应中断

Synchronized

同步关键字

NO

No

(jdk1.6以后)性能和重入锁差不多

reentrantlock

重入锁(re-entrant-lock)

可以,要求释放锁的次数和获取锁次数相同

支持公平锁, ReentrantLock(true),表示公平锁,按排队顺序获取锁

手动获取锁/释放锁操作

可以响应中断


重入锁实现方式:

第一:原子状态,使用CAS操作存储当前锁状态,判断是否被别的线程持有

第二:等待队列,所有没有请求到锁的线程,会进入等待队列,待有线程释放锁之后,系统从等待队列中唤醒一个线程,继续执行.

LogSupport介绍:

可以在线程任意位置让线程阻塞,和Thread.suspend()相比, 不会出现由于resume()在suspend()之前发生,导致线程无限时间挂起情况发生.和object.wait())相比,不需要获取某个对象的锁.也不会抛出interruptedException.

线程处于park()挂起状态的线程不会像suspend()那样给出一个Runnable状态.park()的线程会标识出WAITING状态,同时还会标注由park()引起:

xxxx

java.lang.Thread.State:WAITING(parking)

at sun.misc.Unsafe.park(Native Method)

 
 

你可能感兴趣的:(synchronized和reentrantlock比较)