Java并发基础
文章平均质量分 92
H_Ystar
这个作者很懒,什么都没留下…
展开
-
Java并发 ---- 线程池
newThread的弊端 (1)每次new Thread新建对象,性能较差 (2)线程缺乏统一管理,可能无限制的新建线程,相互竞争,有可能占用过多的系统资源导致死机或者OOM (3)缺少更多得功能,如更多执行,定期执行,线程中断线程池的好处 (1)重用存在的线程,减少对象的创建,消亡的开销,性能好 (2)可以有效控制最大并发线程数,提高系统资源利用率,同时可以避免过多资源竞争...原创 2020-03-06 15:38:48 · 204 阅读 · 0 评论 -
JUC包下的AQS --- 队列同步器
JUC包下的AQS — 队列同步器AQS简介 AQS,即AbstractQueuedSynchronizer,在java.util.concurrent.locks包下面。AQS是用来构建锁和同步器的框架,基于AQS可以简单高效的开发出适合自己的同步器。 ReentrantLock,Semaphore,其他的诸如ReentrantReadWriteLock,SynchronousQue...原创 2020-03-05 17:00:34 · 413 阅读 · 0 评论 -
并发安全的特性 -- 可见性与有序性(happens-before)
导致共享变量在线程之间不可见的原因: 线程交叉执行 重排序结合线程交叉执行 共享变量更新后没有即时在工作内存和主存中即时更新解决可见性问题 一、可见性—synchronizeJMM关于synchronized的两条规定: 1.线程解锁前,必须把共享变量的最新值刷新到主内存。 2.线程加锁前,将清空工作内存中共享变量的值,从而使用共享变量时需要从主内存中重新读取最新的值(...原创 2020-03-01 17:03:21 · 452 阅读 · 0 评论 -
并发安全的特性 -- 原子性:锁
并发安全的特性 – 原子性:锁 JDK为我们提供了两种我们比较常见的锁,分别是:第一种,就是我们比较熟悉的synchronized: 依赖于JVM的关键字。第二种,是Lock: 依赖特殊的CPU指令,代码实现,ReektrantLock。原子性:synchronized主要有以下几种使用方法:一、修饰代码块 大括号括起来的代码,作用于调用的对象...原创 2020-02-29 22:52:42 · 429 阅读 · 0 评论 -
并发安全的特性 -- 原子性:Atomic包
并发安全的特性定义: 当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些进程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么就称这个类是线程安全的主要体现在下面三个方面:1.原子性: 提供了互斥访问,同一时刻只能有一个线程对它进行操作。2.可见性: 一个线程对主内存的修改可以及时被其它线程观察到。3.有序性: 一个线程观察其它线程中...原创 2020-02-29 16:29:03 · 407 阅读 · 0 评论 -
Java内存模型(JMM)
Java内存模型(Java Memory Model,JMM)它规范了Java虚拟机和计算机内存是如何协同工作的,它规定了一个线程如何和何时可以看到其它线程修改过的共享变量的值,以及在必须时如何同步的访问共享变量。Java内存模型如图:**堆(Heap):**运行时的数据区,由垃圾回收来负责的。优势是可以动态的分配内存大小,生存期也不用提前告诉编译器,因为它是在运行时动态分配内存的,垃圾回...原创 2019-07-19 17:19:30 · 187 阅读 · 0 评论 -
CPU多级缓存 MESI-CPU缓存一致性协议 以及 乱序执行优化
一、CPU的多级缓存1.为什么需要CPU缓存在一个典型的系统中,可能会有几个缓存共享主存,每个相应的CPU会发出读写请求,CPU的频率太快了,快的主存跟不上,这样主存常常需要等待主存,而缓存的目的是为了减少CPU读写共享主存的次数,解决CPU和主存速度不匹配的问题。2.CPU缓存有什么意义时间局部性:如果某个数据被访问,那么不久的将来它有可能会再次被访问。空间局部性:如果某个数据被访问,...原创 2019-07-19 08:50:28 · 537 阅读 · 0 评论