next

HashMap的线程不安全是在说什么

…衆ロ難τιáo~ 提交于 2020-10-02 06:18:15
Java程序员都曾被问到的一个问题是: 为什么HashMap是线程不安全的? 为什么ConcurrentHashMap是线程安全的? 为什么HashMap是线程不安全的? Fail-Fast 机制 如果在使用迭代器的过程中有其他线程修改了map,那么将抛出ConcurrentModificationException,这就是所谓fail-fast策略。 看源码的时候我们会看到,在ArrayList,LinkedList,HashMap的内部,有一个int类型的modCount对象,对上述集合内容的修改都将增加这个值。modCount会在迭代器Iterator中使用,在迭代器的构造函数中,有这么一行代码,expectedModCount = modCount。在nextEntity和remove方法的调用过程中,如果modCount != expectedModCount,抛出ConcurrentModificationException异常。 final Entry < K , V > nextEntry ( ) { if ( modCount != expectedModCount ) throw new ConcurrentModificationException ( ) ; } public void remove ( ) { if ( modCount !=

基于细粒度锁的高并发队列的超详细实现和分析过程

雨燕双飞 提交于 2020-10-02 02:29:15
本文内容 一、前言 二、线程安全的队列的实现 1. 使用锁和条件变量来实现线程安全的队列 2. 使用细粒度锁和条件变量来实现线程安全的队列 使用细粒度锁来实现队列的高并发性 引入条件变量来实现队列的可等待接口 三、总结 一、前言 最近在看 《C++ Concurrency In Action 2nd》 ,发现里面有一节基于锁来实现高并发队列讲解的非常棒,并且里面体现了很多细节,而且还给出了一些实现高并发数据结构的指导方针,因此觉得很不错,在此就边翻译边讲解一下。 本教程从比较粗糙的设计开始,一步一步转向更精细的设计,因此,最后的设计才是相对来说最好的版本。 开始前先给出书中关于实现高并发数据结构的指导方针,这个指导方针包含两方面,第一方面是 如何确保并发的安全性 ,第二方面是 如何尽可能的使代码有更多的并发机会,即尽可能的细粒度化锁 。 确保并发安全性的指导方针: 确保其他线程无法看到本线程修改数据结构的中间过程 。也就是说如果某个函数中的某一部分正在修改数据结构,则要确保在修改的过程中,其他线程无法对此数据结构进行任何访问("访问"这个术语同时包含了读取和写入的概念); 通过把一些分开的接口合并成一个接口,从而消除接口间固有的条件竞争 。比如栈的 pop() 和 top() ,分开实现的话,就会存在接口间固有的条件竞争,因此对于并发的版本,就应该将其合并为一个函数; 注意

死锁案例五

拟墨画扇 提交于 2020-10-02 01:32:17
来源:公众号yangyidba 一、前言 死锁其实是一个很有意思也很有挑战的技术问题,大概每个 DBA 和部分开发朋友都会在工作过程中遇见。关于死锁我会持续写一个系列的案例分析,希望能够对想了解死锁的朋友有所帮助。本文是源于生产过程中一个死锁案例。 二、背景知识 官方文档[1]中表述: "REPLACE is done like an INSERT if there is no collision on a unique key. Otherwise, an exclusive next-key lock is placed on the row to be replaced." "如果没有唯一键冲突的时候,replace 操作和insert的加锁方式是一样的。但是如果有唯一键冲突的话,replace语句执行时,系统会在记录上加上 LOCK X next-key lock。" 如果觉得上面翻译比较简单,就看看下面的介绍[2] create table t1( a int auto_increment primary key, b int, c int, unique key (b)); replace into t1(b,c) values (2,3) Step 1 正常的插入逻辑 首先插入聚集索引,在上例中 a 列为自增列,由于未显式指定,每次 Insert

FortiGate为多ADSL接口创建多个对应指定的DDNS动态域名

自作多情 提交于 2020-10-01 13:16:16
本文介绍了如何在FortiGate中为多个拨号接口创建多个对应的DDNS动态域名。 如果我们的防火墙配置了wan1和wan2两个ADSL拨号的接口,且需要针对两个ADSL接口配置不一样的DDNS动态域名解析,则可以参考以下命令配置: config sys ddns edit 1 set monitor-interface wan1 set ddns-server FortiGuardDDNS set ddns-domain dianxin2020.fortiddns.com next edit 2 set monitor-interface wan2 set ddns-server FortiGuardDDNS set ddns-domain liantong2020.fortiddns.com next end 来源: oschina 链接: https://my.oschina.net/u/4334778/blog/4627233

PingCAP 开源分布式数据库 TiDB 论文入选 VLDB

|▌冷眼眸甩不掉的悲伤 提交于 2020-10-01 12:20:26
8 月 31 日 - 9 月 4 日,第 46 届 VLDB 会议以线上直播的方式举行(原定于日本东京召开),PingCAP 团队的论文《TiDB: A Raft-based HTAP Database 》入选 VLDB 2020 ,成为业界第一篇 Real-time HTAP 分布式数据库工业实现的论文。PingCAP 联合创始人、CTO 黄东旭获邀在会上进行演讲,分享关于论文的深度解读及在线答疑。 VLDB(International Conference on Very Large Databases)是数据库领域顶尖的三大学术会议之一,于 1975 年在美国成立,由非盈利性机构 VLDB 基金会赞助和运营,以在全球普及数据库技术研究和交流作为使命。 在本篇论文中,PingCAP 重点介绍了其研发的 TiDB 作为一款定位于在线事务处理和在线实时分析(HTAP)混合负载融合型分布式数据库产品的系统架构和核心特性。 TiDB 受 Google 发布的 Spanner / F1 论文 ,以及 2014 年 Stanford 工业级分布式一致性协议算法 Raft 论文的启发。经过 5 年多的产品研发、生产环境上线验证,取得了一系列成果,此次被 VLDB 2020 收录也是对学术界的反哺。 HTAP(Hybrid Transactional / Analytical

Oracle数据库管理—Trail工程实践

允我心安 提交于 2020-10-01 11:34:26
作者介绍:LY, 狐小E 资深开发工程师,专注移动协同办公平台的SAAS软件开发以及轻应用开发 最近开发了一款移动办公软件 狐小E Oracle数据库管理—Trail工程实践 在Oracle服务器端配置监听、在客户端配置到服务器的连接 工作目标 1 在服务器端再配置一个监听 2 配置客户端服务名 目标实现概要 1 使用ORACLE NET MANAGER在服务器端配置监听 2 使用ORACLE NET MANAGER配置客户端服务命名 详细操作过程描述 使用Oracle Net Manager再服务器端配饰第二个监听 1 使所有用户都能访问Xserver 2 切换到oracle用户,打开netmgr工具 3 给数据库添加第二个监听 选择“Local”中的“Listeners”,然后点击“+”按钮添加监听 4 设定监听程序名称为listener1,单击确定 5 点击Add Address按钮 6 输入服务器的主机名Linux5和端口号1522 7 然后选择Database Service窗口,单击Add Database按钮 8 设置全局数据库名为sdzy,实例名为sdzy,oracle主目录为/db/oracle/product/11.2.0/db_1 9 最后单击菜单栏中的File按钮,在单击Save Network Configuration选项,保存对LISTENER1的修改

10月1日起,Github又有重大改变!

Deadly 提交于 2020-10-01 10:40:49
Python实战社群 Java实战社群 长按识别下方二维码, 按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群 ▲ 开源最前线(ID:OpenSourceTop) 猿妹整编 项目地址:https://www.zdnet.com/article/github-to-replace-master-with-main-starting-next-month/ 从下个月开始,在Github上的所有新库都将用中性词“main”命名,而不是“master”,这个是Github为了防止人们联想到奴隶制的术语,并用更具包容性的术语替换。 Github存储库是用户和公司存储和同步其源代码项目的地方。默认情况下,Github使用术语“master”来表示源代码存储库,开发人员在他们的计算机上复制“master”,并在其中添加自己的代码,然后将更改合并回“master”。从10月1日开始,GitHub上所有新创建的源代码库都将被命名为“main”。 事情是这样的,6月12日,Una Kravets发布了一条Twitter火了,建议Github将以“main”之类的中性术语替换其服务上的“master”,她还解释了这个建议的原因: main 更短,简明扼要! 更容易记住; 如果让我的任何队友都感到舒适,那就开始吧! 甚至不会让黑人在科技界感到更加孤立; GitHub 的

The System is running in low-graphics mode – VMware Workstation(亲测有效)

随声附和 提交于 2020-10-01 10:10:17
亲测有效,就是更新的有点慢 Issue During a reboot on Ubuntu 16.04.3, I got this error message. The System is running in low-graphics mode Your screen, graphics card, and input device settings could not be detected correctly. You will need to configure these yourself. This error message, was misleading since you do not have to configure these things yourself. Fix Step # 1 On the error message, click on the OK button. Next, you will see a new dialog box: What would you like to do? 1)Try running with the default graphical mode 2)Reconfigure graphics 3)Troubleshoot the error 4)Exit to console login Do not do

两个月新增 80 万行代码,Linux 内核维护为什么不会崩?

孤人 提交于 2020-10-01 09:37:15
8 月初,当 Linux 5.8 RC 版本开放测试时,大多数的新闻都聚焦于它的 大小 ,称其为“史上最大的内核版本”。正如 Linus Torvalds 本人 指出的那样 ,“尽管没有任何一件事情能脱颖而出……但 5.8 似乎是我们有史以来最大的发行版之一。” 确实,刚刚发布的 Linux 内核 5.8 RC 具有超过 14,000 个 commit,约 80 万行新代码以及大约 100 名新贡献者。要知道,距离 5.7 正式版发布才仅仅过去了约 2 个月的时间。Linux 内核维护者 Steven Rostedt 认为,5.8 之所以变得如此之大,很有可能是因为 COVID-19 疫情让很多人难以出门旅行,所有人都因此能够在这期间完成比平时更多的工作。 Rostedt 表示,从一个经验丰富的 Linux 内核贡献者和维护者的角度来看,5.8 RC 发行版特别令人震惊的并不是它的大小, 而是它的空前规模对于那些正在维护它的人来说却没有造成困扰 ,“我认为这是因为 Linux 具有比世界上任何软件项目都好的工作流程。” 拥有最佳的工作流程意味着什么?对 Rostedt 而言,这归结为 Linux 内核开发人员随着时间的推移建立的一系列基本规则,以使他们能够持续不断地大规模、可靠地发展 Linux 内核项目。Rostedt 站在一个 Linux 内核资深维护者的角度

福禄克DSX系列,DSX2-600CH线缆检测认证仪

别来无恙 提交于 2020-10-01 08:57:31
综合布线是一种整体模块化且灵活性高的建筑之间相互传输信息的通道,在布线工作完成后还需通过线缆认证仪所出具的报告来判断是否达到合格的标准,在市面上众多的网络电缆测试仪品牌中,福禄克DSX系列的测试仪所出具的报告的权威性也是大部分人所认可的。 福禄克DSX-600 CH 网络线缆认证分析仪规格: 屏蔽和非屏蔽的双绞 LAN 布线: TIA 类别3、4、5、5e、6、6A:100 Ω;ISO/IEC Class C、D、E、EA、F、FA 和 I/II:100? 和 120? 自动测试速度: 5e 或 6 类/Class D 或 E 的全双向自动测试:9 秒;完整的双向 6A 类/ EA 级自动测试:10 秒 支持的测试参数(测试标准决定了报告的参数和频率范围):接线图,长度,传播延迟,延迟偏差,直流回路电阻,插入损耗(衰减),回波损耗 (RL),近端串扰 (NEXT),衰减串扰比 (ACR-N),ACR-F (ELFEXT),综合 ACR-F (PS ELFEXT),综合 NEXT,综合 ACR-N 最大频率:500 MHz 测试结果存储:12,000 Cat 6A 带图 显示屏:5.7 英寸 LCD,具有感应电容触摸屏 体积:主机与智能远端单元:2.625 英寸 x 5.25 英寸 x 11.0 英寸(6.67 厘米 x 13.33 厘米 x27.94 厘米) 重量:3 磅(1.36