
并发编程
文章平均质量分 96
竹子爱熊猫
这个作者很懒,什么都没留下…
展开
-
单体项目偶遇并发漏洞!短短一夜时间竟让老板蒸发197.83元!
眼下这位正襟危坐的男子,即将成为被告人,由于CV大法用上头了,给系统遗留了并发漏洞,幸亏平台用户量不大,否则老板亏损百万起步……原创 2023-05-29 16:04:05 · 537 阅读 · 1 评论 -
(十四)深入并发之线程、进程、纤程、协程、管程与死锁、活锁、锁饥饿详解
引言在之前对于并发编程这个模块的内容已经阐述了很多篇章了,而本章的目的则是为了对前述的内容做个补充,重点会围绕着锁的状态与并行处理的方式进行展开论述。一、进程、线程、纤程、协程、管程概念理解在现在你可能会经常看到进程、线程、纤程、协程、管程、微线程、绿色线程…一大堆xx程的概念,其实这些本质上都是为了满足并行执行、异步执行而出现的一些概念。因为随着如今的科技越来越发达,计算机目前多以多核机器为主,所以之前单线程的串行执行方式注定无法100%程度发挥出硬件该有的性能。同时,为了满足互联网时代中日益渐原创 2021-12-16 00:45:00 · 535 阅读 · 0 评论 -
(十三)全面理解并发编程之分布式架构下Redis、ZK分布式锁的前世今生
引言在前面的大部分文章中,我们反复围绕着线程安全相关问题在对Java的并发编程进行阐述,但前叙的文章中都是基于单体架构的Java程序进行分析的,而如今单体的程序远不足以满足日益渐增的用户需求,所以一般目前Java程序都是通过多机器、分布式的架构模式进行部署。那么在多部署环境下,之前我们分析的CAS无锁、隐式锁、显式锁等方案是否还有效呢?答案是无效。一、单体架构下的锁迁移分布式架构分析在前面关于Synchronized关键字原理剖析以及AQS与ReetrantLock原理分析两篇文章中,曾得知这两种都是原创 2021-12-15 15:58:21 · 2374 阅读 · 0 评论 -
(十二)彻悟并发之JUC分治思想产物-ForkJoin分支合并框架原理剖析下篇
引言在《(十二)彻悟并发之JUC分治思想产物-ForkJoin分支合并框架原理剖析上篇》中,我们曾初步了解了ForkJoin分支合并框架的使用,也分析框架的成员构成以及任务提交和创建工作的原理实现,在本篇则会对框架的任务执行、任务扫描、线程挂起、结果合并以及任务窃取的源码实现进行分析。一、工作线程执行任务/工作窃取实现过程在上篇的最后,从signalWork() -> tryAddWorker() -> createWorker() -> newThread() -> Fork原创 2021-11-06 09:30:00 · 214 阅读 · 0 评论 -
(十一)彻悟并发之JUC分治思想产物-ForkJoin分支合并框架原理剖析上篇
引言在上篇文章《深入理解并发之Java线程池、工作原理、复用原理及源码分析》中,曾详细谈到了Java的线程池框架。在其中也说到了JDK提供的四种原生线程池以及自定义线程池,而本文则再来详细谈谈JDK1.7中新推出的线程池:ForkJoinPool。但ForkJoinPool的出现并不是为了替代ThreadPoolExecutor,而是作为它的补充,因为在某些场景下,它的性能会比ThreadPoolExecutor更好。在之前的模式中,往往一个任务会分配给一条线程执行,如果有个任务耗时比较长,并且在处理期间原创 2021-11-05 15:03:48 · 304 阅读 · 0 评论 -
(九)深入并发编程之并发容器:阻塞队列、写时复制容器、锁分段容器原理详谈
引言相信大家在学习JavaSE时都曾接触过容器这一内容,一般Java中的容器可分为四类:Map、List、Queue以及Set容器,而在使用过程中,对于ArrayList、HashMap等这类容器都是经常使用的,但问题在于这些容器在并发环境下都会存在线程安全问题。所以当我们在多线程环境下使用容器时,一般会使用Vector、HashTable来代替之前的ArrayList、HashMap,或者通过如下几个Collections提供的方法来将容器转换线程安全的:// 将一个List转换为线程安全的List原创 2021-10-27 07:00:00 · 427 阅读 · 0 评论 -
(八)深入并发之Runnable、Callable、FutureTask及CompletableFuture原理分析
引言关于Runnable、Callable接口大家可能在最开始学习Java多线程编程时,都曾学习过一个概念:在Java中创建多线程的方式有三种:继承Thread类、实现Runnable接口以及实现Callable接口。但是实则不然,真正创建多线程的方式只有一种:继承Thread类,因为只有new Thread().start()这种方式才能真正的映射一条OS的内核线程执行,而关于实现Runnable接口以及实现Callable接口创建出的Runnable、Callable对象在我看来只能姑且被称为“多线程原创 2021-10-26 10:00:00 · 1011 阅读 · 0 评论 -
(七)全面剖析Java并发编程之线程变量副本ThreadLocal原理分析
引言在之前的文章:彻底理解Java并发编程之Synchronized关键字实现原理剖析中我们曾初次谈到线程安全问题引发的"三要素":多线程、共享资源/临界资源、非原子性操作,简而言之:在同一时刻,多条线程同时对临界资源进行非原子性操作则有可能产生线程安全问题。而如果想要解决线程安全问题,我们只需要破坏掉三要素中的任意条件即可,如下:①破坏多线程条件:同一时刻,一条线程对共享资源进行非原子性操作,不会产生线程安全问题②破坏共享资源条件:同一时刻多条线程对局部资源进行非原子性操作,也不会产生线程安全问题原创 2021-10-23 07:30:00 · 1111 阅读 · 0 评论 -
(六)手撕并发编程之基于Semaphore与CountDownLatch分析AQS共享模式实现
引言在上篇文章深入剖析并发之AQS独占锁&重入锁(ReetrantLock)及Condition实现原理中我们曾基于ReetrantLock锁分析了AQS独占模式的实现原理,本章则准备从Semaphore信号量的角度出发一探AQS共享模式的具体实现。共享模式与独占模式区别在于:共享模式下允许多条线程同时获取锁资源,而在之前分析的独占模式中,在同一时刻只允许一条线程持有锁资源。一、快速认识Semaphore信号量及实战Semaphore信号量是java.util.concurrent(JUC)包原创 2021-10-22 20:30:00 · 261 阅读 · 0 评论 -
(五)深入剖析并发之AQS独占锁&重入锁ReetrantLock及Condition实现原理
引言在我们前面的文章《深入理解Java并发编程之无锁CAS机制》中我们曾提到的CAS机制如果说是整个Java并发编程基础的话,那么本章跟大家所讲述的AQS则是整个Java JUC的核心。不过在学习AQS之前需要对于CAS机制有一定的知识储备,因为CAS在ReetrantLock及AQS中的实现随处可见。一、JUC中的Lock锁接口在我们并发编程的文章一开始,我们都是在围绕着线程安全问题叙述它的解决方案,在前面的文章中我们曾提到过CAS无锁机制、synchronized关键字等多种解决方案,在其中CAS原创 2021-10-21 23:30:00 · 400 阅读 · 0 评论 -
(四)深入理解Java并发编程之无锁CAS机制、魔法类Unsafe、原子包Atomic
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar原创 2021-10-21 06:30:00 · 429 阅读 · 0 评论 -
(十)深入理解Java并发编程之ThreadPool线程池、工作原理、复用原理及源码分析
一、序言一般在开发过程中,一个功能是运行时长太久了,一般是通过什么方式去优化的?多线程,对于一个业务方法而言,如果其中的调用链太长势必会引起程序运行时间延长,导致整个系统吞吐来量下降,而我们使用多线程方式来对该方法的调用链进行优化,对于一些耦合度不是特别高的调用关系可以直接通过多线程来走异步的方式进行处理,大大的缩短了程序的运行时长,但是如果我们的多线程创建方式是通过 new Thread()...原创 2020-03-04 16:37:00 · 239 阅读 · 0 评论 -
(二)彻底理解Java并发编程之Synchronized关键字实现原理剖析
引言Synchronized关键字(互斥锁)原理,一线大厂不变的面试题,同时也是理解Java并发编程必不可少的一环!其中覆盖的知识面很多,需要理解的点也很多,本文是以相关书籍和结合自己的个人理解从基础的应用范围到底层深入剖析的方式进行阐述,如果错误或疑问欢迎各位看官评论区留言纠正,谢谢!一、Synchronized应用方式及锁类型众所周知,在项目开发过程中使用多线程的效果就是一个字:快!多线程编程能够去给我们的程序带来很大的性能收益,同时也能够去把机器的性能发挥到极致。而当现在的时代进步发展,机器的硬原创 2020-06-20 14:19:28 · 649 阅读 · 0 评论 -
(三)死磕并发之深入Hotspot源码剖析Synchronized关键字实现
引言关于源码分析如果不是功底特别深厚的小伙伴可能需要用心的去细心咀嚼,千万不要抱着看一边就能懂的心态学习,不然最终也没有任何作用。如果只是想要研究Synchronized关键字原理那么请观看我的上一篇文章:彻底理解Java并发编程之Synchronized关键字实现原理剖析。五、Hotspot源码深度解读Synchronized关键字原理从 monitorenter和 monitorexit这两个指令来开始阅读源码,JVM将字节码加载到内存以后,会对这两个指令进行解释执行, monitorenter,原创 2020-06-22 22:19:39 · 1008 阅读 · 0 评论 -
(一)玩命死磕Java内存模型(JMM)与Volatile关键字底层原理
引言本篇文章结合我个人对Java内存模型的理解以及相关书籍资料为前提全面剖析JMM内存模型,本文的书写思路先阐述JVM内存模型、硬件与OS(操作系统)内存区域架构、Java多线程原理以及Java内存模型JMM之间的串联关系之后再对Java内存模型进行进一步剖析,因为大部分小伙伴在描述Java内存模型JMM时总是和JVM内存模型的概念相互混淆,那么本文的目的就是帮助各位小伙伴彻底理解JMM内存模型...原创 2020-04-26 22:19:53 · 736 阅读 · 1 评论