
Java并发编程
文章平均质量分 97
在如今的互联网大浪潮下,并发不可不会。
玄郭郭
那些年 那些路 梦,在路上。
展开
-
ThreadPoolExcutor源码解析(JDK1.8)
目录ThreadPoolExcutor源码解析一、为什么要用线程池?二、线程池执行任务的四大步骤三、线程池的创建与使用四、源码解析1.线程池参数与构造器参数2.Worker类,后面的源码中会用到3.execute() 任务执行4.shutdown 关闭线程池五、线程池工作大致流程图ThreadPoolExcutor源码解析一、为什么要用线程池?比较好理解的解释的大概:正常我们执行一个任务,会创建一个线程去执行它。创建线程会通知CPU建立起一个连接.原创 2020-11-30 00:00:39 · 345 阅读 · 0 评论 -
ConcurrentHashMap源码解析(JDK1.8)
目录ConcurrentHashMap源码解析一、什么是ConcurrentHashMap二、源码解析1.构造函数及部分参数2.初始化3.put操作4.get操作5.remove操作6.clear操作ConcurrentHashMap源码解析一、什么是ConcurrentHashMapConcurrentHashMap与HashMap数据结构一致,他是线程安全的。ConcurrentHashMap中是不允许key和value为null的,而HashMap是原创 2020-11-15 16:00:06 · 610 阅读 · 0 评论 -
HashMap源码解析(JDK1.8)
目录HashMap源码解析一、什么是HashMap二、JDK1.8的HashMap的数据结构图三、针对HashMap提出的疑问1.数据是如何存入数组的呢?2.为什么构造参数(数组大小)无论设置为什么都会被改成2的指数倍呢?3.为什么要用红黑树呢?4.为什么不直接用数组+红黑树呢?四、上源码,源码解析1.Node的数据结构2.构造函数及部分参数3.put操作4.扩容操作5.转化为红黑树(不详细介绍了)6.get操作7.remove操作8.cl原创 2020-11-10 00:06:23 · 615 阅读 · 2 评论 -
AQS之Atomic详解
目录什么是原子性Atomic基本属性什么是CASAtomicInteger源码解析Unsafe的线程调度什么是原子性原子性(Atomicity): 指事务的不可分割性,一个事务的所有操作要么不间断地全部被执行,要么一个也没有执行。Atomic基本属性在Atomic包里一共有12个类,四种原子更新方式,分别是原子更新基本类型,原子更新数组,原子更新引用和原子更新字段。Atomic包里的类基本都是使用Unsafe实现的包装类。基本类:AtomicInteger..原创 2020-09-26 22:21:11 · 487 阅读 · 0 评论 -
AQS之BlockingQueue源码解析
目录BlockingQueue介绍队列类型常见的5种阻塞队列BlockingQueue中APIBlockingQueue源码解析ArrayBlockingQueue简单图解BlockingQueue介绍BlockingQueue 是一个先进先出(FIFO)的阻塞队列。BlockingQueue,java.util.concurrent 包提供的用于解决并发生产者 - 消费者问题的最有用的类,它的特性是在任意时刻只有一个线程可以进行take或者put操作,并且Blockin原创 2020-09-23 00:46:52 · 286 阅读 · 0 评论 -
AQS之ReentrantLock源码解析
ReentrantLock源码解析AQS的基本概念Java并发编程核心在于java.concurrent.util包,juc当中的大多数同步器实现都是围绕着共同的基础行为,比如等待队列、条件队列、独占获取、共享获取等,而这个行为的抽象就是基于AbstractQueuedSynchronizer简称AQS,AQS定义了一套多线程访问共享资源的同步器框架,是一个依赖状态(state)的同步器。AQS保证线程安全的大致原理(伪代码) //加锁 lock; //为什么要..原创 2020-09-13 01:47:45 · 247 阅读 · 0 评论 -
全面理解Synchronized
Synchronized目录Synchronizedsynchronized基本概念synchronized底层原理Monitor监视器锁Synchronized可重入锁什么是monitor对象的内存布局对象头锁的膨胀升级过程锁的粗化锁的消除逃逸分析对于synchronized,我首先提出了下面3个问题,1.什么东西需要同步?2.为什么我们需要同步?3.我们如何去同步?在多线程编程中,有可能会出现多个线程同时访问同一个共享、可变资源的情况,这个原创 2020-08-30 00:53:27 · 517 阅读 · 0 评论 -
全面理解MESI缓存一致性协议
MESI缓存一致性协议多核CPU多级缓存一致性协议MESI多核CPU的情况下有多个一级缓存,如何保证缓存内部数据的一致,不让系统数据混乱。这里就引出了一个一致性的协议MESI。MESI协议缓存状态MESI 是指4中状态的首字母。每个Cache line(缓存行(Cache line):缓存存储数据的单元)。有4个状态,可用2个bit表示,它们分别是:Modidied(修改),Exclusive(独享),Shared(共享),Invalid(无效)。注意:对于M和E状态..原创 2020-08-27 23:40:43 · 1134 阅读 · 6 评论 -
全面理解Volatile关键字
什么是volatile?volatile是Java虚拟机提供的轻量级的同步机制。volatile关键字作用是什么?两个作用:1.保证被volatile修饰的共享变量对所有线程总数可见的,也就是当一个线程修改了一个被volatile修饰共享变量的值,新值总是可以被其他线程立即得知。2.禁止指令重排序优化。volatile的可见性关于volatile的可见性作用,我们必须意识到被volatile修饰的变量对所有线程总数立即可见的,对volatile变量的所有写操作总是能立刻反应.原创 2020-08-26 00:30:45 · 404 阅读 · 0 评论 -
全面理解Java内存模型(JMM)
Java内存模型(JMM):java memory modelJMM是一个抽象的概念,算是一种定义的规则。与jvm不同Java内存模型:因为在不同的硬件生产商和不同的操作系统下,内存的访问逻辑有一定的差异,结果就是当你的代码在某个系统环境下运行良好,并且线程安全,但是换了个系统就出现各种问题。Java内存模型,就是为了屏蔽系统和硬件的差异,让一套代码在不同平台下能到达相同的访问结果。JMM从java 5开始的JSR-133发布后,已经成熟和完善起来。JVM在设计时候考虑到,如果JAVA线程每次读原创 2020-08-25 23:57:39 · 236 阅读 · 0 评论