并发编程
文章平均质量分 95
kkkkatoq
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
ReentrantLock、ReentrantReadWriteLock、StampedLock讲解
ReentrantReadWriteLock实现了读写分离,但是一旦读操作比较多的时候,想要获取写锁就变得比较困难了,假如当前1000个线程,999个读,1个写,有可能999个读取线程长时间抢到了锁,那1个写线程就悲剧了因为当前有可能会一直存在读锁,而无法获得写锁,根本没机会写。ReentrantReadWriteLock读的过程中不允许写,只有等待线程都释放了读锁,当前线程才能获取写锁,也就是写入必须等待,这是一种悲观的读锁,人家还在读着那,你先别去写,省的数据乱。所以,需要释放所有读锁,才可获取写锁。原创 2025-05-18 19:32:18 · 359 阅读 · 0 评论 -
AbstractQueuedSynchronizer之AQS
公平锁和非公平锁: 公平锁:锁被释放以后,先申请的线程先得到锁。性能较差一些,因为公平锁为了保证时间上的绝对顺序,上下文切换更频繁 非公平锁:锁被释放以后,后申请的线程可能会先获取到锁,是随机或者按照其他优先级排序的。性能更好,但可能会导致某些线程永远无法获取到锁 可重入锁: 也叫做递归锁,指的是线程可以再次获取自己的内部锁,比如一个线程获取到了对象锁,此时这个对象锁还没有释放,当其想再次获取这个对象锁的时候还是可以获取的,如果不可重入的话,会导原创 2025-05-13 21:17:25 · 308 阅读 · 0 评论 -
Synchronized与锁升级
锁升级的过程:锁升级后,hashcode去哪儿了?原创 2025-05-11 21:37:54 · 444 阅读 · 0 评论 -
Java对象内存布局和对象头
对象需要存储的运行时数据很多,其实已经超出了32、64位Bitmap结构所能记录的最大限度,但对象头里的信息是与对象自身定义的数据无关的额外存储成本,考虑到虚拟机的空间效 率,Mark Word被设计成一个有着动态定义的数据结构,以便在极小的空间内存储尽量多的数据,根据对象的状态复用自己的存储空间。可以看到一共占用了16个字节,对象头占8个字节,类型指针占4个字节,数组长度4个字节,总共16字节。(在64位系统中,Mark Word占了8个字节,类型指针占了8个字节,一共是16个字节)原创 2025-05-11 12:07:59 · 475 阅读 · 0 评论 -
ThreadLocal
5个销售买房子,集团只关心销售总量的准确统计数,按照总销售额统计,方便集团公司给部分发送奖金--------群雄逐鹿起纷争------为了数据安全只能加锁/*** 需求:5个销售卖房子,集团只关心销售总量的精确统计数*/i <= 5;j++) {try {System.out.println(Thread.currentThread().getName() + "\t" + "共计卖出多少套: " + house.saleCount);/**原创 2025-05-09 18:21:55 · 305 阅读 · 0 评论 -
CAS与原子类
就是说多线程环境操作时,第一步先将主内存中的值读取到工作内存中,这个工作内存中的值就是旧的预期值,主内存中的值就是内存值,在自己的工作区执行完之后,比如说在工作内存中进行了 i++ 操作,然后执行完操作之后,会将工作内存中的值跟主内存中的值进行对比,如果一致则进行重写操作,如果不一致则本次操作作废,重新进行读取然后操作。CAS是实现自旋锁的基础,CAS利用CPU指令保证了操作的原子性,以达到锁的效果,至于自旋呢,看字面意思也很明白,自己旋转。原子类靠的是CAS思想,CAS思想实现靠的是Unsafe类。原创 2025-04-27 19:59:29 · 734 阅读 · 0 评论 -
Java内存模型JMM与volatile关键字
1、你知道什么是Java内存模型JMM吗?2、JMM和volatile他们两个之间的关系?3、JMM没有那些特征或者它的三大特征是什么?4、为什么要有JMM,它为什么出现?作用和功能是什么?5、happens-before先行并发原则你有了解过吗?原创 2025-04-23 21:36:50 · 320 阅读 · 0 评论 -
Java中的锁
乐观锁: 认为自己在使用数据的时候不会有别的线程修改数据或资源,不会添加锁,Java中使用无锁编程来实现,只是在更新的时候去判断,之前有没有别的线程更新了这个数据,如果这个数据没有被更新,当前线程将自己修改的数据成功写入,如果已经被其他线程更新,则根据不同的实现方式执行不同的操作,比如:放弃修改、重试抢锁等等。-----适合读操作多的场景,不加锁的特性能够使其读操作的性能大幅提升,乐观锁则直接去操作同步资源,是一种无锁算法,得之我幸不得我命---佛系锁。原创 2025-04-20 22:49:21 · 552 阅读 · 0 评论 -
CompletableFuture
举例:比如主线程让一个子线程去执行任务,子线程可能比较耗时,启动子线程开始执行任务后,主线程就去做其他事情了,忙完其他事情或者先执行完,过了一会再才去获取子任务的执行结果或变更的任务状态(老师上课时间想喝水,他继续讲课不结束上课这个主线程,让学生去小卖部帮老师买水完成这个耗时和费力的任务)。Future接口(FutureTask实现类)定义了操作异步任务执行一些方法,如获取异步任务的执行结果、取消异步任务的执行、判断任务是否被取消、判断任务执行是否完毕等。原创 2025-04-16 18:25:07 · 253 阅读 · 0 评论 -
JUC并发编程
Monitor其实是一种同步机制,它的义务是保证(同一时间)只有一个线程可以访问被保护的数据和代码,JVM中同步是基于进入和退出监视器(Monitor管程对象)来实现的,每个对象实例都会有一个Monitor对象,Monitor对象和Java对象一同创建并销毁,底层由C++语言实现。是一种特殊的线程为其他线程服务的,在后台默默地完成一些系统性的任务,比如垃圾回收线程就是最典型的例子。是在不同实体上的多个事件,是在多台处理器上同时处理多个任务,同一时刻,大家都在做事情,你做你的,我做我的,各干各的。原创 2025-04-16 16:09:22 · 1021 阅读 · 0 评论 -
创建多线程+异步实现方式总结
首先分为简单实现跟线程池方式实现:简单实现:1、有返回值继承Thread类、实现Runnable接口2、无返回值实现Callable接口使用线程池实现:1、有返回值2、无返回值。原创 2023-11-02 18:32:56 · 2132 阅读 · 0 评论
分享