
面試必問之 CopyOnWriteArrayList,你了解多少?
- 2022 年 1 月 14 日
- 筆記
一、摘要 在介绍 CopyOnWriteArrayList 之前,我们一起先来看看如下方法执行结果,代码内容如下: public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.a …
Continue Reading
一、摘要 在介绍 CopyOnWriteArrayList 之前,我们一起先来看看如下方法执行结果,代码内容如下: public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.a …
Continue Reading前言 没啥深入实践的理论系同学,在使用并发工具时,总是认为把 HashMap 改为 ConcurrentHashMap ,就完美解决并发了呀。或者使用写时复制的 CopyOnWriteArrayList ,性能更佳呀!技术言论虽然自由,但面对魔鬼面试官时,我们更在乎的是这些真的正确吗? 整理了100 …
Continue Reading前言 我们知道,ConcurrentHashmap(1.8)这个并发集合框架是线程安全的,当你看到源码的get操作时,会发现get操作全程是没有加任何锁的,这也是这篇博文讨论的问题——为什么它不需要加锁呢? 为什么 ConcurrentHashMap 的读操作不需要加锁? ConcurrentHas …
Continue Reading如果有一个整型变量count,多个线程并发让count自增1,你会怎么设计? 你知道如何让多个线程协作完成一件事件吗? 前言 很高兴遇见你~ ConcurrentHashMap是个老生常谈的集合类了,我们都知道多线程环境下不能直接使用HashMap,而需要使用ConcurrentHashMap,但有 …
Continue Reading
并发编程实践中,ConcurrentHashMap是一个经常被使用的数据结构,相比于Hashtable以及Collections.synchronizedMap(),ConcurrentHashMap在线程安全的基础上提供了更好的写并发能力,但同时降低了对读一致性的要求(这点好像CAP理论啊 O(∩ …
Continue Reading
【前言:无论是大数据从业人员还是Java从业人员,掌握Java高并发和多线程是必备技能之一。本文主要阐述Java并发包下的阻塞队列和并发容器,其实研读过大数据相关技术如Spark、Storm等源码的,会发现它们底层大多用到了 Java并发队列、同步类容器 、ReentrantLock等。建议大家结合 …
Continue Reading
HashMap、ConcurrentHashMap HashMap常见的不安全问题及原因 非原子操作 ++ modCount 等非原子操作存在且没有任何加锁机制会导致线程不安全问题; 扩容取值 扩容期间会创建新的table在数据转储期间,可能会有取到null的可能; 碰撞丢失 多线程情况下,若同时对 …
Continue Reading在上一篇文章 【简单了解系列】从基础的使用来深挖HashMap 里,我从最基础的使用中介绍了HashMap,大致是JDK1.7和1.8中底层实现的变化,和介绍了为什么在多线程下可能会造成死循环,扩容机制是什么样的。感兴趣的可以先看看。 我们知道,HashMap是非线程安全的容器,那么为什么Concu …
Continue Reading
本文所说的session是单机版本的session, 事实上在当前的互联网实践中已经不太存在这种定义了。我们主要讨论的是其安全共享的实现,只从理论上来讨论,不必太过在意实用性问题。 1. session 的意义简说 大概就是一个会话的的定义,客户端有cookie记录,服务端session定义。用于确 …
Continue Reading引入ConcurrentHashMap 模拟使用hashmap在多线程场景下发生线程不安全现象 import java.util.HashMap; import java.util.Map; import java.util.UUID; /** * 模拟hashmap在多线程场景下的出现的不安全现象 …
Continue Reading