显式锁

骑猪看日落 2022-03-27 02:54 277阅读 0赞

显式锁:高级功能,轮询,定时,中断,公平性: 非公平发出请求时锁可用可以直接抢,否则也要排队,公平的只要锁不可用或前面有人就去排队
公平性很好,但没必要,而且会带来性能问题(挂起和恢复线程的开销,恢复线程到线程真正运行有不少延迟,非公平锁在这段时间内可让其他线程可完成加解锁操作),统计上的公平性保证(线程最终能获得锁)就好了
非块结构(不基于代码块,加锁解锁可能不在同一栈帧),千万不要忘记在finally里解锁

  1. lock.lock();
  2. try {
  3. } finally {
  4. lock.unlock();
  5. }

目前synchronized性能接近显式锁,以前不如

内置锁:统计上公平,安全,线程转储中看到加锁和死锁信息更多(栈帧相关),优化(锁消除,锁粒度粗化,轻量级,偏向等),所以推荐内置锁,当需要高级功能用显式锁

读写锁:(Reentrant)ReadWriteLock 在多读少写的情况下性能提升,实现需要考虑多个问题
可重入,可降级(加写锁,加读锁,释放写锁),不可升级(会导致死锁,两个线程同时升级又都不肯放弃自己的读锁)
公平:等待时间最长的优先获取,现在读锁中,又一个读请求来了,若无写锁请求在排队可直接获取,否则去排队,现在写锁中,各种请求都去排队
非公平:见ReadWriteLock专栏分析

发表评论

表情:
评论列表 (有 0 条评论,277人围观)

还没有评论,来说两句吧...

相关阅读

    相关 示例

    tryLock在一定时间内获取不到锁不会一直阻塞,会返回false,然后线程会继续向下走。 package com.iteye.yuanyuan7891.thread

    相关

    显式锁:高级功能,轮询,定时,中断,公平性: 非公平发出请求时锁可用可以直接抢,否则也要排队,公平的只要锁不可用或前面有人就去排队 公平性很好,但没必要,而且会带来性能问题