前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >带你搞懂Java多线程(五)

带你搞懂Java多线程(五)

作者头像
longzeqiu
发布2020-01-15 15:55:09
2420
发布2020-01-15 15:55:09
举报

synchronized的缺点

  • 获取synchronized关键字的锁不能中断
  • 没有尝试获取锁的机制

Lock接口和核心方法

Lock(显示锁)

Lock是一个接口,只能手动的获取和释放锁,属于Java语法层面的锁,解决了synchronized的缺点注意 使用lock.lock()后,应将lock.unlock();放在finally中;

public void add(){
  lock.lock();
   try{
    count++;
    }finally{
      lock.unlock();
    }
}

可重入锁ReentrantLock

允许一个线程反复多次的去拿同一把锁。 递归调用的时候,防止一个线程自己把自己锁死。

锁的公平和非公平

  • 公平锁,当多个线程申请同一把锁的时候,先申请的先拿到。
  • 非公平锁,当多个线程申请同一把锁的时候,可能后申请的反而先拿到锁。

哪个更好

性能上非公平锁比公平锁性能更好,因为如果是公平锁,线程拿不到锁会挂起,而线程挂起导致的上下文切换会浪费时间周期。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • synchronized的缺点
  • Lock接口和核心方法
    • Lock(显示锁)
    • 可重入锁ReentrantLock
    • 锁的公平和非公平
      • 哪个更好
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档