
java并发编程
文章平均质量分 96
并发编程
chihaihai
你懂的越多,也就懂得的越少
展开
-
redis---分布式锁存在的问题及解决方案(Redisson)
系列文章目录提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录系列文章目录前言一、pandas是什么?二、使用步骤1.setNx2.set NX NP3.锁超时问题3.1过期时间如何设置3.2锁的续签4.增加锁的可重入性2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人原创 2022-04-01 21:42:40 · 16970 阅读 · 5 评论 -
JAVA并发编程---ThreadLocal底层原理全解析
简介ThreadLocal虽然在工作中使用的场景可能并不是很多,但是还是很值得我们去了解和学习一下的。在特定场景下它能发挥出很大的作用,首先,让我们来了解下什么是ThreadLocal。ThreadLocal就是我们俗称的线程本地变量,它常用来做数据隔离,填充的数据只属于当前线程。变量的数据对别的线程而言是相对隔离的,在多线程环境下,能够防止自己的变量被其它线程篡改。在之前一篇对springMvc中的RequestC ontextHolder学习的一篇文中就有涉及到ThreadLocal ,《spring原创 2020-08-07 09:59:12 · 648 阅读 · 0 评论 -
JAVA并发编程---CountDownLatch原理剖析
简介:CountDownLatch就是我们常说的门闩或者同步计数器,常用于一个或多个线程等待其它线程完成操作的场景。在CountDownLatch出现之前我们一般都使用线程的join()方法来实现类似功能,但是很多时候join不够灵活,很难满足业务场景,所以后面JDK就为我们提供了CountDownLatch这个类。简单使用案例:假设我们此时正在使用迅雷下载一部大桥老师高达10G的经典影视作品,在不关心网速的情况下为了提升下载速度迅雷后台开启5个线程每个任务分2gb为我们下载。在这5个线程下载任务都结原创 2020-07-29 11:50:24 · 1792 阅读 · 0 评论 -
JAVA并发编程---ArrayBlockingQueue源码详解
一、概念ArrayBlockingQueue 是一个底层又数组实现有界队列,遵循FIFO的规则对元素进行排序,默认情况下不保证线程公平的访问队列。二、源码分析基本属性: /** 底层数组实现 */ final Object[] items; /** 记录队首元素的索引下标,用于take,poll,peek,remove 等方法*/ int takeIndex; /** 记录队尾元素...原创 2020-04-29 00:56:48 · 290 阅读 · 0 评论 -
JAVA并发编程---CopyOnWriteArrayList
CopyOnWriteArrayList就是最常说的写时复制容器,虽然在项目中使用场景不是很多但是某些特定环境下会得到不错的性能提升。简单来说它的原理就跟名字一样写时复制,当我们往一个容器添加元素的时候,并不会不直操作容器进行修改,而是先将当前容器进行Copy,复制出一个容器的副本,然后在赋值出的这个容器上进行修改,修改完成之后,再将原容器的引用指向新的容器。这样做的好处是我们可以对CopyO n...原创 2020-04-24 11:21:49 · 216 阅读 · 0 评论 -
java并发编程---线程池详解
一、线程池创建创建线程池我们一般会采用ThreadPoolExecutor的方式去根据自己实际业务需求自定义线程池,至于为什么摒弃Executors工具类的创建方式可以看下阿里开发手册给出的解释(上面第二条我感觉也很有必要就多截了一点):参数解释:ThreadPoolExecutor(int corePoolSize, // 线程池长期维持的线程数,即使线程处于闲置状态也不会回...原创 2020-04-16 14:52:11 · 251 阅读 · 0 评论 -
JAVA并发编程---上下文切换
上下文的切换首先要追溯单个处理器的时期,在当时的环境下操作系统就能处理多线程并发任务。Cpu通过给每个线程分配时间片来实现这种机制,线程只能在分配的时间片内执行任务。时间片简单的来说就是Cpu分配给各个线程的执行时间。因为时间片非常短,所以Cpu通过不断的切换线程执行,让我们感觉到多个线程是在同时执行的因为时间片一般都只有几十毫秒所以人类是无法感知到的。 Cpu通过时间片分配算法来...原创 2020-04-15 00:52:52 · 283 阅读 · 0 评论 -
java基础---volatile底层实现原理详解
大家都知道生产中可以使用volatile达到保证可见性和指令重排的目的。但是对其实现原理并不是很清楚,为了加深学习和理解感觉很有必要来写篇博客总结一下。JMM—java内存模型想知道volatile实现原理首先得去了下解JMM,我们都知道JVM会为每一个thread开辟一块自己的工作空间,在我们操作变量时是从主内存拿到变量的一个副本,然后对副本进行操作后再刷新到主内存中这么一个总体的流程。...原创 2020-04-01 01:15:07 · 9195 阅读 · 5 评论 -
JAVA并发编程---ReentrantLock源码分析
先来段背景故事,1.6之前synchronize直接调用底层操作系统的函数进行加锁。这样做是很重的,CPU在内核态与用户态之间不断的切换十分消耗性能。此时我们的大神Doug Lea就站了出来,这个老头吊的很我们的JUC包就是这位大佬写的。在多线程领域有着举足轻重的地位。他创造了Reentrant Lock来优化我们加锁的性能。sun公司一看这我他妈能忍么,岂不是让外人看我们笑话。从1.7开始对s...原创 2019-09-18 00:41:53 · 211 阅读 · 0 评论