![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JUC学习进阶
文章平均质量分 82
skye_fly
这个作者很懒,什么都没留下…
展开
-
JMH基准测试 & Disruptor单机最快MQ
一、JMH:Java Microbenchmark Harness(java微基准测试)实操步骤新建Maven项目,导入JMH依赖jmh-core / jmh-generator-annprocess编写测试类以及要测试的方法在test包下新建测试类写一个测试方法,导入要测试的方法并加上注解运行测试方法得到测试报告public class JMHTestDemo { @Benchmark /** 预热,让JVM完成即时编译优化 */ @Warmup(iterati原创 2021-10-22 21:48:04 · 251 阅读 · 0 评论 -
并发容器与线程池
一、容器分类Collection是一个个元素的加到容器;Map是一对对元素的加入容器;Queue主要是为高并发提高服务;物理上只有两种分类:连续存储的数组 + 非连续存储的链表Vector、HashTable是最早期的容器,每个方法都自带Sychronized,基本不用,只需要了解其数据结构;Map高并发时使用ConcurrentHashMap主要是因为它读取数据的速度快,插入数据的速度未必会比HashTable、SychronizedHashMap快;(发展历程:HashTable —原创 2021-10-22 21:35:24 · 211 阅读 · 0 评论 -
ThreadLocal与涉及的弱引用/虚引用
一、ThreadLocal每个线程拥有一个独有的ThreadLocalMap对象,线程需要自己往里面设值,之后才能读到自己设置的变量值,线程对他们各自拥有的ThreadLocal对象做更改操作时,其他线程是获取不到这些改动的;结合下图分析:线程中set ThreadLocal对象Object o时:是在当前线程的一个map中加入一个K-V,K是一个ThreadLocal,V是我们往这个ThreadLocal容器中加入的一个对象。(也就是说map中一个entry对应一个TreadLocal对象(Key原创 2021-10-18 17:10:59 · 2402 阅读 · 0 评论 -
Sychronized & Volatile & Atomic& ReentrantLock工具类 & AQS底层实现
一、SynchronizedSynchronized保障的有序性是指多个线程依次执行同步代码块或者同步方法,对于代码块中的多条指令无法保障有序性;Sychronized的对象在new时要加上final(final Object o = new Object; sychronized(o){}),防止该对象被有些线程篡改,因为锁是加在对象头上的,如果o被指向了新的一个对象,那么其他线程就可以重新在该新的对象头上加锁,导致多线程同时访问某个程序块或者方法。Sychronized重量级的体现:锁是由操作系统原创 2021-10-05 17:54:19 · 126 阅读 · 0 评论 -
线程的三大特性(可见性、有序性、原子性)
一、可见性L1、L2、L3级缓存:缓存中有变量时,如果不加限制,CPU直接从当前最近的缓存读取变量值,不会去内存中读,所以多核并发执行的线程之间可能同一个变量同一时间有不同的值(初始时刻缓存中没有的变量会从内存中读取,然后一级级的保存到缓存中,下次CPU使用时会从最近的缓存中读取该变量)另外,不加限制的话,CPU什么时候将计算好的变量新值写入内存中也是无法预知的。缓存行:为了减少从内存读数据的次数,每次操作系统访问内存空间都会一次性读取64Byte大小的数据,在缓存中以一行的形式存放该64字节数据原创 2021-10-05 17:03:16 · 2807 阅读 · 0 评论 -
线程基础补充
一、线程切换(上下文切换)当一个线程需要切换到另一个线程时,将该线程在CPU寄存器中的资源放入缓存中,将另一个线程需要的资源从缓存中取出放入CPU寄存器并开始执行。二、线程分类CPU密集型:线程大多数时间在执行CPU运算;IO密集型:线程大多数时间在执行IO;混合型:大多数线程既有CPU运算和又有IO;三、线程数量选择计算公式:N_thread = N_cpu * U_cpu *(1+W/C)W:线程等待时间C:线程利用CPU计算时间(特例:线程运行时间与等待时间相等,所以发挥原创 2021-10-05 16:34:50 · 76 阅读 · 0 评论