![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发编程
文章平均质量分 91
JinziH Never Give Up
不积跬步,无以至千里;不积小流,无以成江海。
展开
-
JDK8中ConcurrentHashMap底层源码解析-扩容机制
在面试中ConcurrentHashMap的扩容机制也是经常会被问到的问题。ConcurrentHashMap的扩容机制比较复杂,在JDK8中加入了多线程扩容来改进效率,源码也是非常的长。本篇文章就来简单的解析一下ConcurrentHashMap扩容的底层源码,供大家参考学习。本章的难度较大,ConcurrentHashMap的源码难就难在它不仅长度长而且逻辑比较复杂,第一次看看不懂是很正常的事情。个人认为看源码还是很有必要的,这会让你对这个知识点有一个全新的认识,而不是局限在背八股文。https。...原创 2022-08-02 14:42:42 · 1074 阅读 · 0 评论 -
JDK8中ConcurrentHashMap底层源码解析-put和putVal方法以及数组的初始化
JDK1.8中的ConcurrentHashMap选择了与HashMap相同的Node数组+链表+红黑树结构;在锁的实现上,抛弃了原有的Segment分段锁,采用CAS+synchronized实现更加细粒度的锁。本篇文章以JDK8为例,对ConcurrentHashMap的底层源码做一个解析,帮助大家更好的理解ConcurrentHashMap的底层原理。https。...原创 2022-08-01 16:03:07 · 605 阅读 · 0 评论 -
Thread、ThreadLocal、ThreadLocalMap是什么?看这一篇
一提到ThreadLocal,很多人都会心惊胆战,因为ThreadLoca确实算是JAVA并发编程中一大难点,尤其是ThreadLocal、ThreadLocalMap、Thread三者之间的关系更是错综复杂。本文结合JAVA源码,皆以最简单的方式介绍这三者概念以及它们之间的关系,希望能帮读者打通这其中的任督二脉。之前一直有个观念,学习一个新的知识之前,必先了解其为什么诞生以及其解决的是什么问题。之前我们学习多线程的时候就知道,多线程对共享变量进行访问,可以会出现安全问题。ThreadLocal(线程变原创 2022-06-30 16:38:26 · 3574 阅读 · 4 评论 -
JUC常用类CopyOnWriteArrayList
JUC有一个常用类CopyOnWriteArrayList,非常适合在多读少写的场景,CopyOnWriteArraySet的实现也是基于 CopyOnWriteArrayList(不能存储重复数据),所以我们直接学习CopyOnWriteArrayList即可。1.ArraayList 是线程不安全的(读和写都不加锁),在高并发情况下可能会出现问题。2.Vector是线程安全的(读和写都会加锁),但是在很多应用场景中,读操作可能会远远大于写操作。由于读操作根本不会修 改原有的数据,因此如果每次读取都进行原创 2022-06-04 15:54:18 · 145 阅读 · 0 评论 -
JUC线程同步类工具CountDownLatch和CyclicBarrier
Java5.0在java.util.concurrent 包中提供了多种并发容器类来改进同步容器的性能。本章主要介绍了两种JUC常用类:CountDownLatch和CyclicBarrier。这两种常常作为线程同步类工具去使用。例如:现在有50个任务,这50个任务在完成之后,才能执行下一个方法,要怎么设计?答:JDK给我们提供的线程工具类,CountDownLatch和CyclicBarrier,这两个类都可以等到线程完成之后,才去执行某些操作。既然都可以满足需要,那这两个类有什么区别?答:主要的原创 2022-06-04 14:39:00 · 385 阅读 · 0 评论 -
一篇文章带你了解并发编程的核心问题以及实战场景
从并发编程中的原子性、可见性、有序性三个角度出发,最后结合单例模式的双重校验锁模式进一步分析volatile的实战场景。并发编程的核心问题就是解决三个特性:可见性、有序性、原子性。什么是可见性?一个线程对共享变量的修改,另外一个线程能够立刻看到,我们称为可见性什么是有序性?有序性指的是程序按照代码的先后顺序执行注意:编译器和处理器可能会对指令进行重排序,会影响到多线程并发执行的正确性.什么是原子性?操作是不可再分割的。在多线程环境下,两个线程各自执行100次i++操作,i的值为多少?答:i的取值原创 2022-06-03 10:42:26 · 181 阅读 · 0 评论 -
synchronized和ReentrantLock的实现原理与区别?一篇文章就够了
文章目录前言一、synchronized1.1对象头1.2同步方法1.3同步代码块二、ReentrantLock2.1ReentrantLock概述2.2ReentrantLock执行流程三、synchronized和Lock的区别总结前言如果某一个资源被多个线程共享,为了避免因为资源抢占导致资源数据错乱,我们需要对线程进行同步,那么synchronized和ReentrantLock就是实现线程同步的两个重要内容,可以说在并发控制中是必不可少的部分。本章就来介绍synchronized和Reent.原创 2022-02-07 21:48:21 · 2229 阅读 · 0 评论 -
CAS操作原理与实现
文章目录前言一、乐观锁二、悲观锁三、CAS操作原理与实现总结前言一、乐观锁二、悲观锁三、CAS操作原理与实现总结原创 2022-01-26 19:52:05 · 1484 阅读 · 0 评论 -
理解线程池
回想之前我们所学的数据库连接池,其基本原理是在内部对象池中维护一定数量的数据库连接,避免了频繁的建立、关闭连接,极大地提高了系统的性能。线程池的原理类似,在内部维护了一定数量的线程,可以重复使用,避免了频繁的创建和销毁线程造成的资源浪费以及大量的不必要的时间开销。本文主要介绍了ThreadPoolExecutor 类、核心参数、线程池的执行流程等内容。线程池的好处是减少在创建和销毁线程上所消耗的时间以及系统资源的开销,解决资源不足的问题。...原创 2022-01-20 21:58:53 · 243 阅读 · 0 评论 -
理解ConcurrentHashMap
众所周知HashMap虽然效率高,但不是线程安全的,存在多线程并发下的安全隐患,而HashTable虽然是线程安全的,但锁的粒度太大(get/put使用synchronized锁住整个Hash表),效率非常低下(只能有一个线程操作)。ConcurrentHashMap减小了锁的粒度,保证线程安全的前提下,效率也能得到保障。在学习ConcurrentHashMap之前建议读者先学习HashMap和HashTable的相关内容,为学习ConcurrentHashMap打下良好的基础。httpshttps。...原创 2022-02-01 16:28:23 · 1779 阅读 · 0 评论