lock和synchronized 对比

1、特色:reentainLock 可以维持公平性、响应中断、超时机制

2、性能:并发不严重sync更优,高并发reentainLock好。Sync的重量级锁需要用户态到内核态的切换,sync 本质是轮询的方式抢占,lock = 通知 + CAS

3、底层实现:synclock 有同步队列、也有等待队列,sync是基于 object wait/notify,lock 是基于conditionawait/sigal,底层是locksupport.park/unpark

4、等待对比:sync 没抢上锁的会进入同步阻塞队列,线程处于BLOCKED,LockSupprot.park线程进入WAITTING状态。阻塞态当一条正在执行的线程请求某一资源失败时,就会进入阻塞态。而在Java中,阻塞态专指请求锁失败时进入的状态。由一个阻塞队列存放所有阻塞态的线程。处于阻塞态的线程会不断请求资源,一旦请求成功,就会进入就绪队列,等待执行。PS:锁、IOSocket等都资源。等待态当前线程中调用waitjoinpark函数时,当前线程就会进入等待态。

也有一个等待队列存放所有等待态的线程。线程处于等待态表示它需要等待其他线程的指示才能继续运行。进入等待态的线程会释放CPU执行权,并释放资源(如:锁)

猜你喜欢

转载自www.cnblogs.com/hansc-blog/p/9347732.html