
并发编程
文章平均质量分 83
java并发编程从入门到精通
王老狮
现500强企业担任核心技术骨干,有多年的技术开发和管理经验。曾在公司主导过开放平台系统架构的设计,大数据平台架构设计。现主要负责公司数据中台体系的从0到1的建设,擅长分布式,高并发,大数据等技术领域。在系统安全、微服务、技术架构等领域输出多篇技术专利。对新技术有着极高的热情,喜欢钻研和研究未知的领域,善于分享,输出技术文章全网阅读200W左右。善于目标驱动,抛弃过往的经验,回到问题的本质。
展开
-
并发编程专题十三-并发编程相关面试题汇总
目录一、谈面试二、并发编程常见面试题1、在java中守护线程和用户线程的区别?2、线程与进程的区别3、什么是多线程中的上下文切换4、死锁与活锁的区别,死锁与饥饿的区别?5、synchronized底层实现原理6、什么是线程组,为什么在Java中不推荐使用?7、什么是Executors框架?为什么使用Executor框架?8、在Java中Executor和Ex...原创 2019-09-30 10:23:32 · 63120 阅读 · 2 评论 -
并发编程十二-Java内存模型以及底层实现原理
目录在app上无法点击,应该是优快云的bug。大家当做简介看好了。下拉正文。目录前言:JMM基础-计算机原理1、物理内存模型带来的问题2、伪共享3、Java内存模型(JMM)4、Java内存模型带来的问题4.1 可见性问题4.2 竞争问题4.3 重排序5、volatile详解5.1 volatile特性5.2 volatile的内存语义5.3 ...原创 2019-07-14 17:52:57 · 62304 阅读 · 1 评论 -
并发编程十一java8新增的并发特性
一、原子操作CAS1.1 LongAdderJDK1.8时,java.util.concurrent.atomic包中提供了一个新的原子类:LongAdder。根据Oracle官方文档的介绍,LongAdder在高并发的场景下会比它的前辈-->AtomicLong 具有更好的性能,代价是消耗更多的内存空间。1.2 AtomicLong中的问题AtomicLong是利用了底层...原创 2019-07-06 13:27:57 · 1361 阅读 · 0 评论 -
并发编程专题十-其他的并发容器
首先祝大家建党98周年快乐。今天把自己的书房家具添置完毕,非常的开心,一直都希望能拥有一间大书房,今天终于实现了。oh,应该说实现了一半,因为这个书房有些小,哈哈。以后争取努力换个大的。上一章给大家讲了ConcurrentHashMap的源码,相信大家对java中使用加锁,cas等操做实现其同步功能,对字段使用final进行标记,使用volatile等方法保证其内存可见性,都有较为深刻的理解。...原创 2019-07-01 21:12:53 · 2999 阅读 · 1 评论 -
并发编程专题九-并发容器ConcurrentHashMap源码分析
在上一章中我们讲到在高并发下,使用hashMap会导致一系列的问题。那么我们当我们需要使用类似于hashMap那样的存储集合类的时候,我们该怎么做呢?一、并发容器Java的集合容器框架中,主要有四大类别:List、Set、Queue、Map,大家熟知的这些集合类ArrayList、LinkedList、HashMap这些容器都是非线程安全的。如果有多个线程并发地访问这些容器时,就会出现...原创 2019-06-24 08:55:38 · 2374 阅读 · 0 评论 -
并发编程专题八-HashMap死循环分析
一、HashMap并发中存在的问题在我们开发程序过程中,hashMap算是我们最常用的数据结构了,那么如果我们在高并发下使用hashMap可能会出现什么问题呢?1、拿到的结果不是我们想要的。(非线程安全)2、扩容而导致程序死循环。致使CPU100%;(JDK1.7版本扩容,1.8暂无此问题。严重)为什么会出现死循环,接下来我们进行分析一下。首先我们了解下hashMap的源码,以及p...原创 2019-06-24 08:51:02 · 2585 阅读 · 0 评论 -
并发编程专题七-什么是线程安全
一、什么是类的线程安全既然今天的主题是线程安全,那什么是线程安全呢?其实线程安全并没有一个明确的定义,Doug Lea大师(不认识的去百度,java不认识的去面壁)给下的定义为多线程下使用这个类,不过多线程如何使用和调度这个类,这个类总是表示出正确的行为,这个类就是线程安全的。类的线程安全表现为:操作的原子性 内存的可见性不做正确的同步,在多个线程之间共享状态的时候,就会出...原创 2019-06-16 16:15:33 · 1581 阅读 · 0 评论 -
并发编程专题六-线程池的使用与原理
一、什么是线程池?为什么要用线程池?线程池(thread pool):一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。优势:降低资源的消耗。降低线程创建和销毁的资源消耗; 提高响应速度。例如:线程的...原创 2019-05-28 09:38:38 · 291 阅读 · 0 评论 -
并发编程专题五-AbstractQueuedSynchronizer源码分析
PS:外号鸽子王不是白来的,鸽了好几天,也是因为比较忙,时间太少了,这篇东西有点多,需要慢慢消化。不知不觉居然写了4个多小时....一、什么是AQSaqs是AbstractQueuedSynchronizer的简称,是用来构建锁或者其他同步组件(信号量、事件等)的基础框架类。JDK中许多并发工具类的内部实现都依赖于AQS,如ReentrantLock, Semaphore, Coun...原创 2019-05-15 18:06:48 · 44938 阅读 · 0 评论 -
并发编程专题四-原子操作和显示锁
一、原子操作CAS1、什么是原子操作atomic operation?所谓原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch (线程切换)。2、java是如何实现原子操作?1、使用synchronized对操作加锁存在问题:1、被阻塞的线程优先级很高2、拿到锁的线程一直不释放锁怎么办?3、大量的...原创 2019-05-04 17:47:25 · 420 阅读 · 0 评论 -
并发编程专题三-JAVA线程的并发工具类
一、Fork-Join框架1、分而治之规模为N的问题,N<阈值,直接解决,N>阈值,将N分解为K个小规模子问题,子问题互相对立,与原问题形式相同,将子问题的解合并得到原问题的解,像hadoop中的mapreduce,以及二分查找,都是用的分而治之的思想。动态规范2、工作密取 workStealing就是在任务分割的时候,前面的任务执行可能会比后面的执行速度快,当...原创 2019-04-23 07:25:58 · 44812 阅读 · 0 评论 -
并发编程专题二-线程间的共享和协作
一、线程间的共享1、synchronized内置锁对象锁,锁的是类的对象实例。类锁 ,锁的是每个类的的Class对象,每个类的的Class对象在一个虚拟机中只有一个,所以类锁也只有一个。2、volatile关键字适合于只有一个线程写,多个线程读的场景,因为它只能确保可见性。3、ThreadLocal线程变量。可以理解为是个map,类型 Map<Thread,Int...原创 2019-04-21 20:49:26 · 44724 阅读 · 0 评论 -
并发编程专题一-线程相关基础概念
一、基础概念1、CPU核心数和线程数的关系核心数:线程数=1:1 ;使用了超线程技术后---> 1:22、CPU时间片轮转机制又称RR调度,会导致上下文切换3、什么是进程和线程进程:程序运行资源分配的最小单位,进程内部有多个线程,会共享这个进程的资源线程:CPU调度的最小单位,必须依赖进程而存在。4、澄清并行和并发并行:同一时刻,可以同时处理事情的能力...原创 2019-04-21 20:33:00 · 414 阅读 · 0 评论