全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

java 线程公平锁与非公平锁详解及实例代码

java 线程公平锁与非公平锁详解

在ReentrantLock中很明显可以看到其中同步包括两种,分别是公平的FairSync和非公平的NonfairSync。公平锁的作用就是严格按照线程启动的顺序来执行的,不允许其他线程插队执行的;而非公平锁是允许插队的。

默认情况下ReentrantLock是通过非公平锁来进行同步的,包括synchronized关键字都是如此,因为这样性能会更好。因为从线程进入了RUNNABLE状态,可以执行开始,到实际线程执行是要比较久的时间的。而且,在一个锁释放之后,其他的线程会需要重新来获取锁。其中经历了持有锁的线程释放锁,其他线程从挂起恢复到RUNNABLE状态,其他线程请求锁,获得锁,线程执行,这一系列步骤。如果这个时候,存在一个线程直接请求锁,可能就避开挂起到恢复RUNNABLE状态的这段消耗,所以性能更优化。

  /**
   * Creates an instance of {@code ReentrantLock}.
   * This is equivalent to using {@code ReentrantLock(false)}.
   */
  public ReentrantLock() {
    sync = new NonfairSync();
  }

默认状态,使用的ReentrantLock()就是非公平锁。再参考如下代码,我们知道ReentrantLock的获取锁的操作是通过装饰模式代理给sync的。

 /**
   * Acquires the lock.
   *
   * <p>Acquires the lock if it is not held by another thread and returns
   * immediately, setting the lock hold count to one.
   *
   * <p>If the current thread already holds the lock then the hold
   * count is incremented by one and the method returns immediately.
   *
   * <p>If the lock is held by another thread then the
   * current thread becomes disabled for thread scheduling
   * purposes and lies dormant until the lock has been acquired,
   * at which time the lock hold count is set to one.
   */
  public void lock() {
    sync.lock();
  }

下面参考一下FairSync和NonfairSync对lock方法的实现:

 /**
   * Sync object for non-fair locks
   */
  static final class NonfairSync extends Sync {
    /**
     * Performs lock. Try immediate barge, backing up to normal
     * acquire on failure.
     */
    final void lock() {
      if (compareAndSetState(0, 1))
        setExclusiveOwnerThread(Thread.currentThread());
      else
        acquire(1);
    }
  }

  /**
   * Sync object for fair locks
   */
  static final class FairSync extends Sync {
    final void lock() {
      acquire(1);
    }
  }

当使用非公平锁的时候,会立刻尝试配置状态,成功了就会插队执行,失败了就会和公平锁的机制一样,调用acquire()方法,以排他的方式来获取锁,成功了立刻返回,否则将线程加入队列,知道成功调用为止。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# java  # 线程公平锁与非公平锁  # 线程公平锁与非公平锁详解  # 线程公平锁与非公平锁实例  # Java线程公平锁和非公平锁的差异讲解  # Java concurrency之非公平锁_动力节点Java学院整理  # java非公平锁知识点实例详解  # 就会  # 挂起  # 都是  # 这一  # 两种  # 其他的  # 这段  # 希望能  # 可以看到  # 这个时候  # 要比  # 而非  # 谢谢大家  # 新来  # 则将  # 与非  # 中很  # 情况下  # 经历了  # 严格按照 


相关文章: 网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?  免费网站制作appp,免费制作app哪个平台好?  模具网站制作流程,如何找模具客户?  视频网站app制作软件,有什么好的视频聊天网站或者软件?  公司门户网站制作流程,华为官网怎么做?  如何正确选择百度移动适配建站域名?  网站制作软件免费下载安装,有哪些免费下载的软件网站?  网站插件制作软件免费下载,网页视频怎么下到本地插件?  三星网站视频制作教程下载,三星w23网页如何全屏?  黑客入侵网站服务器的常见手法有哪些?  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  小型网站制作HTML,*游戏网站怎么搭建?  如何在云服务器上快速搭建个人网站?  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略  外贸公司网站制作哪家好,maersk船公司官网?  如何高效利用亚马逊云主机搭建企业网站?  如何快速搭建自助建站会员专属系统?  建站之星如何快速解决建站难题?  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  建站主机选择指南:服务器配置与SEO优化实战技巧  建站之星后台密码遗忘或太弱?如何重置与强化?  如何在IIS中配置站点IP、端口及主机头?  广州建站公司哪家好?十大优质服务商推荐  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  网站制作免费,什么网站能看正片电影?  临沂网站制作企业,临沂第三中学官方网站?  免费公司网站制作软件,如何申请免费主页空间做自己的网站?  专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?  网站制作的步骤包括,正确网址格式怎么写?  音乐网站服务器如何优化API响应速度?  建站之星安装后如何配置SEO及设计样式?  建站之星上传入口如何快速找到?  如何通过可视化优化提升建站效果?  C#怎么创建控制台应用 C# Console App项目创建方法  定制建站是什么?如何实现个性化需求?  如何撰写建站申请书?关键要点有哪些?  c++怎么用jemalloc c++替换默认内存分配器【性能】  娃派WAP自助建站:免费模板+移动优化,快速打造专业网站  如何通过VPS建站无需域名直接访问?  想学网站制作怎么学,建立一个网站要花费多少?  山东云建站价格为何差异显著?  建站之星代理如何获取技术支持?  制作网站的基本流程,设计网站的软件是什么?  如何快速重置建站主机并恢复默认配置?  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  如何通过虚拟主机快速搭建个人网站?  在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?  制作门户网站的参考文献在哪,小说网站怎么建立?  建站三合一如何选?哪家性价比更高? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。