当前位置: 首页 > news >正文

ArrayBlockingQueue 带有三个参数的构造函数为何需要加锁?

哪一个构造函数

public ArrayBlockingQueue(int capacity, boolean fair,Collection<? extends E> c) {this(capacity, fair);final ReentrantLock lock = this.lock;lock.lock(); // Lock only for visibility, not mutual exclusiontry {final Object[] items = this.items;int i = 0;try {for (E e : c)items[i++] = Objects.requireNonNull(e);} catch (ArrayIndexOutOfBoundsException ex) {throw new IllegalArgumentException();}count = i;putIndex = (i == capacity) ? 0 : i;} finally {lock.unlock();}}

原因

ArrayBlockingQueue的带有三个参数的构造函数中,加锁的目的不是为了实现互斥(即不是为了阻止多个线程同时进入关键区域)。相反,它主要用于确保在构造函数中的可见性,而不是互斥。

<
http://www.lryc.cn/news/169815.html

相关文章:

  • 实训笔记——Spark计算框架
  • 自定义类型:结构体
  • postman如何设置才能SwitchHosts切换host无缓存请求到指定ip服务
  • LeetCode LCR 103. 零钱兑换【完全背包,恰好装满背包的最小问题】中等
  • 竞赛 基于深度学习的人脸专注度检测计算系统 - opencv python cnn
  • supervisord 进程管理器 Laravel执行队列
  • Lnmp架构之mysql数据库实战1
  • ChatGLM 大模型炼丹手册-理论篇
  • Spring Boot集成Redis实现数据缓存
  • CentOS 7 安装Libevent
  • 线性代数的本质——几何角度理解
  • SSH key 运作方式
  • 【基于MBD开发模式的matlab持续集成(一)】
  • Linux学习记录——이십팔 网络基础(1)
  • CSS动效合集之实现气泡发散动画
  • 六、串口通信
  • 如何将 JavaScript Excel XLSX 查看器添加到Web应用程序
  • 网安周报|CISA发布增强开源安全性的计划
  • 使用 Docker 安装 Elasticsearch (本地环境 M1 Mac)
  • Visual Studio中MD与MT的区别及运行库类型选择
  • Vue3函数式编程
  • 【逗老师的无线电】艾德克斯TTL串口转网口
  • 如何修改jupyter notebook默认打开路径
  • 【leetcode】数组排序
  • 【C刷题训练营】第四讲(打好基础很重要)
  • MySQL 某个字段存储不了内容
  • 7.代理模式
  • 单例模式的安全写法
  • 牛客网SQL156
  • 【MongoDB】docker部署社区版(一)