源码|从源码分析非线程安全集合类的不安全迭代器
非线程安全集合类(这里的集合指容器Collection,非Set)的迭代器结合了及时失败机制,但仍然是不安全的。这种不安全表现在许多方面: 并发修改“通常”导致及时失败 单线程修改也可能导致及时失败的“误报” 迭代器会“丢失”某些并发修改行为,让及时失败失效 如果不了解其不安全之处就随意使用,就像给程序埋下了地雷,随时可能引爆,却不可预知。…
在这个技术方向,积累扎实的知识与实践。
共 547 篇文章非线程安全集合类(这里的集合指容器Collection,非Set)的迭代器结合了及时失败机制,但仍然是不安全的。这种不安全表现在许多方面: 并发修改“通常”导致及时失败 单线程修改也可能导致及时失败的“误报” 迭代器会“丢失”某些并发修改行为,让及时失败失效 如果不了解其不安全之处就随意使用,就像给程序埋下了地雷,随时可能引爆,却不可预知。…
什么是垃圾回收 垃圾回收(Garbage Collection,GC),顾名思义就是释放垃圾占用的空间,防止内存泄露。有效的使用可以使用的内存,对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收。 Java 语言出来之前,大家都在拼命的写 C 或者 C++ 的程序,而此时存在一个很大的矛盾,C++…
Java Io 什么是流 I: Input | 输入 O: Output | 输出 流的分类 按照数据的流向 输入流:读数据 输出流:写数据 按照数据类型来分 字节流 字节输入流 字节输出流 字符流 字符输入流 字符输出流 输入流`,`输出流 字节流`,`字符流 文件字节输入流 FileInputStream package FileInput;…
一、String里不再使用char[] 在JDK9之前,String内部是通过char数组(char[])来保存字符数据的。但在JDK9以后,String的实现内部改为使用 byte数组(byte[]) 。这样做的主要原因是为了 节省内存空间…
前言 在java的庞大体系中,其实有很多不错的小工具,也就是我们平常说的: 轮子 。 如果在我们的日常工作当中,能够将这些轮子用户,再配合一下idea的快捷键,可以极大得提升我们的开发效率。 今天我决定把一些压箱底的小工具,分享给大家,希望对你有所帮助。 本文会分享17个我们日常工作中一定会用得到的小工具,主要内容如下: 1. Collections…
前言 相信大家一定遇到过需要在生产环境备份用户的mysql数据,以便满足数据的存储、迁移等操作。下面我将介绍我是如何操作的。 满足每天定期备份,备份文件的有效期是7天,备份数据为:患者信息、用户信息 环境:linux Ubuntu docker mysql 废话不多说,下面 show you the code 其中a.sh 的脚本内容如下: cd…
此文对于部分原理的解释不全,甚至有错误。建议同时参考 一文解决内存屏障 阅读。 在只有双重检查锁,没有volatile的懒加载单例模式中,由于 指令重排序 的问题,我确实不会拿到 两个不同的单例 了,但我会拿到 “半个”单例 。 而发挥神奇作用的volatile,可以当之无愧的被称为Java并发编程中 “出现频率最高的关键字”…
前言 SOLID(单一、开闭、里式替换、接口隔离、依赖倒置)五大原则和23种设计模式(常见的单例、构建者、装饰、适配、代理、组合、模板等等),小伙伴们对这些肯定都很熟悉。这些原则和设计模式能够辅助我们,让我们在设计的时候有所抉择,从而达到高内聚、低耦合的目的。…
1.系统不是分布式 1.1.单机版系统抢单案例 // 抢取订单函数 public synchronized void grabOrder(Long orderId, Long userId) { // 获取订单信息 OrderDO order = orderDAO.get(orderId); if (Objects.isNull(order)) {…
一、限流 为什么要进行限流? 1.瞬时流量过高,服务被压垮? 2.恶意用户高频光顾,导致服务器宕机? 3.消息消费过快,导致数据库压力过大,性能下降甚至崩溃? …… 什么是限流? 限流是对某一时间窗口内的请求数进行限制,保持系统的可用性和稳定性,防止因流量暴增而导致的系统运行缓慢或宕机。 在高并发系统中,出于系统保护角度考虑,通常会对流量进行限流。…