![](https://img-blog.csdnimg.cn/20190918140037908.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java并发
文章平均质量分 85
JAVA并发知识
ayu_programer
不积硅步,无以至千里
展开
-
Java-并发高频面试题-3
Exchanger(交换者)是一个用于线程间协作的工具类。Exchanger用于进行线程间的数据交换。它提供一个同步点,在这个同步点,两个线程可以交换彼此的数据。这两个线程通过 exchange方法交换数据,如果第一个线程先执行exchange()方法,它会一直等待第二个线程也执行exchange方法,当两个线程都到达同步点时,这两个线程就可以交换数据,将本线程生产出来的数据传递给对方。线程池: 简单理解,它就是一个管理线程的池子,那么线程池有哪些好处呢?原创 2024-02-20 08:25:25 · 890 阅读 · 1 评论 -
Java-并发高频面试题-2
如果要想清楚锁升级,需要先知道不同锁的状态,这个锁状态其实就是java对象头中的mark word 标记字段,而这块结构会随着锁的状态的变化而变化。如下图所示:再具体细看 Mark Word存储的是对象自身的 运行数据,如哈希码、GC分代年龄、锁状态标志、偏向时间戳(Epoch) 等信息。而从上图也可以看出因为mark word状态的不同又可以区分出无锁,偏向锁,轻量级锁,重量级锁,我们依次介绍下吧无锁:简单来说就是mark word中锁状态为01时,同时在低三位不是偏向锁的状态。原创 2024-02-05 23:30:22 · 1013 阅读 · 0 评论 -
Java-并发高频面试题
说白了就是在程序执行时,为了提升效率,编译器 和执行器在执行指令时会对指令进行重排序,但是注意不能随意重排序,不是你想怎么排序就怎么排序,它需要满足以下两个条件:在单线程环境下不能改变程序运行的结果;存在数据依赖关系的不允许重排序这两个条件其实也就是两个规则as-if-serial和 happens-before;重排序不会影响单线程环境的执行结果,但是会破坏多线程的执行语义。原创 2024-01-30 23:00:05 · 1005 阅读 · 0 评论 -
并发编程为什么会有等待通知机制?
并发编程为什么会有等待通知机制上一篇文章说明了 Java并发死锁解决思路 , 解决死锁的思路之一就是 破坏请求和保持条件, 所有柜员都要通过唯一的账本管理员一次性拿到所有转账业务需要的账本,就像下面这样:没有等待/通知机制之前,所有柜员都通过死循环的方式不断向账本管理员申请所有账本,程序的体现就是这样:while(!accountBookManager.getAllRequiredAccountBook(this, target));假如账本管理员是年轻小伙,腿脚利落(即执行 getAllReq原创 2021-07-02 20:14:10 · 88 阅读 · 0 评论 -
java内存模型与volatile关键字解析
1、CPU缓存模型说起java内存模型,其实可以先聊聊CPU缓存模型,那么什么是CPU缓存模型呢?话不多说,直接看图简单的看其实CPU缓存模型主要有主内存与CPU缓存构成,整理的流程就是如果CPU要操作某个变量的值会把这个变量的值从主内存加载到CPU缓存,然后会基于CPU缓存对变量进行频繁的读写操作引入CPU缓存的好处就是每个cpu不用和主内存打交道,都是直接操作自己的高速缓存,效率提高了。2、java内存模型(JMM)话不多说,还是先怼张图吧,其实看到图就知道java内存模型和cpu缓原创 2021-07-11 12:16:36 · 106 阅读 · 0 评论 -
double-checked-单例模式与volatile
public class Singleton{ private static volatile Singleton instance = null; private Singleton(){} public Singleton getInstance(){ if(null == instance){ synchronized(Singleton.class){ if(null == instance)原创 2021-07-18 14:09:44 · 335 阅读 · 0 评论 -
压测工具loadrunner使用及定时设置
一、压测流程1.申请压力机申请压力机器,每个场景一台windows机器作为控制机,负载机器为linux2.将脚本上传到控制机上脚本示例Action(){ lr_start_transaction("demo"); web_url("web_url", "URL=http://test.stress.api:30900/test/kafka/produce?clusterId=1&sendType=0&ack=1&producerId=1&messageSi原创 2022-04-05 22:04:24 · 2014 阅读 · 0 评论 -
线程池的原理解析
1 线程池的原理1) 即当有任务过来时会先判断当前线程池里的线程数量是否小于核心线程数,如果小于就直接创建线程来执行当前任务,2)当线程池里的线程数量等于核心线程数时新来的线程会进入到blockingqueue中,3)当队列中的线程数量满了之后,会判断是否设置了最大线程数,如果设置了会再线程池里再次创建线程,直到数量等于最大线程数4)如果创建了最大线程数量后,任务仍然执行不完,就会走这个拒绝策略机制具体的策略机制有四种默认的是abortpolicy—会直接抛出异常,rejectExectorEx原创 2021-03-16 07:21:35 · 99 阅读 · 0 评论