并发编程
文章平均质量分 91
淡墨@~无痕
这个作者很懒,什么都没留下…
展开
-
JUC并发编程系列详解篇之十八(CPU缓存架构与缓存一致性协议详解)
CPU缓存即高速缓冲存储器,是位于CPU与主内存间的一种容量较小但速度很高的存储器。由于CPU的速度远高于主内存,CPU直接从内存中存取数据要等待一定时间周期,Cache中保存着CPU刚用过或循环使用的一部分数据,当CPU再次使用该部分数据时可从Cache中直接调用,减少CPU的等待时间,提高了系统的效率。原创 2022-10-04 16:13:05 · 268 阅读 · 1 评论 -
JUC并发编程系列详解篇十七(happens-before原则)
happens-before是JMM最核心的概念。对应Java程序员来说,理解happens-before是理解JMM的关键。原创 2022-09-12 23:55:44 · 336 阅读 · 1 评论 -
JUC并发编程系列详解篇十六(java中的其他锁)
无锁,偏向锁,轻量级锁,重量级锁,这四种锁是指锁的状态,专门针对synchronized的。偏向锁通过对比Mark Word解决加锁问题,避免执行CAS操作。而轻量级锁是通过用CAS操作和自旋来解决加锁问题,避免线程阻塞和唤醒而影响性能。重量级锁是将除了拥有锁的线程以外的线程都阻塞。原创 2022-09-12 16:17:34 · 253 阅读 · 0 评论 -
JUC并发编程系列详解篇一(基础)
同步和异步通常来形容一次方法调用,同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为。异步方法调用更像一个消息传递,一旦开始,方法调用就会立即返回,调用者就可以继续后续的操作。而异步方法通常会在另外一个线程中“真实”地执行。整个过程,不会阻碍调用者的工作。如图所示:图中显示了同步方法调用和异步方法调用的区别。对于调用者来说,异步调用似乎是一瞬间就完成的。如果异步调用需要返回结果,那么当这个异步调用真实完成时,则会通知调用者。原创 2022-09-10 01:36:39 · 642 阅读 · 0 评论 -
JUC并发编程系列详解篇十五(公平锁VS非公平锁)
ReentrantLock 是一把可重入锁,也是一把互斥锁,它具有与 synchronized 相同的方法和监视器锁的语义,但是它比 synchronized 有更多可扩展的功能。ReentrantLock 的可重入性是指它可以由上次成功锁定但还未解锁的线程拥有。当只有一个线程尝试加锁时,该线程调用 lock() 方法会立刻返回成功并直接获取锁。如果当前线程已经拥有这把锁,这个方法会立刻返回。可以使用 isHeldByCurrentThread 和 getHoldCount 进行检查。原创 2022-09-12 15:56:45 · 307 阅读 · 0 评论 -
JUC并发编程系列详解篇十四(自旋锁 VS 适应性自旋锁)
自旋锁 VS 适应性自旋锁 ,当一个线程尝试去获取某一把锁的时候,如果这个锁此时已经被别人获取(占用),那么此线程就无法获取到这把锁,该线程将会等待,间隔一段时间后会再次尝试获取。这种采用循环加锁 -> 等待的机制被称为自旋锁(spinlock)。原创 2022-09-12 01:41:08 · 258 阅读 · 0 评论 -
JUC并发编程系列详解篇十三(悲观锁VS乐观锁)
在java并发编程中,锁有很多种类,如下图所示:悲观锁乐观锁自旋锁适应性自旋锁无锁偏向锁轻量级锁重量级锁公平锁非公平锁可重入锁不可重入锁共享锁排他锁。原创 2022-09-11 23:57:48 · 271 阅读 · 0 评论 -
JUC并发编程系列详解篇十二(synchronized底层原理进阶)
之后的程序睡眠5秒钟后,程序中t1、t2线程执行代码块时,有意的将其线程睡眠几秒钟,目的在于不管那个线程率先抢到锁,都能让另外一个线程在自旋等待中,所以t1线程打印的是“00”就已经是轻量级锁了,最后看程序执行结果,t2打印的是“10”就已经升级为重量级锁了,显然t2线程已经超过了自旋的最大次数,已经转成重量级锁了。接着线程t1打印了object对象头,可以与第一个打印出来的对象头对比不难发现t1打印的也是偏向锁,但是t1打印的对象头已经把t1的线程id记录在了其对应的23位;原创 2022-09-11 20:04:11 · 559 阅读 · 0 评论 -
JUC并发编程系列详解篇十一(synchronized底层的锁)
操作系统分为“用户空间”和“内核空间”,JVM是运行在“用户态”的,jdk1.6之前,在使用synchronized锁时需要调用底层的操作系统实现,其底层monitor会阻塞和唤醒线程,线程的阻塞和唤醒需要CPU从“用户态”转为“内核态”,频繁的阻塞和唤醒对CPU来说是一件负担很重的工作,这些操作给系统的并发性能 带来了很大的压力。同这个时候CPU就需要从“用户态”切向“内核态”,在这个过程中就非常损耗性能而且效率非常低,所以说jdk1.6之前的synchronized是重量级锁。原创 2022-09-11 01:25:59 · 428 阅读 · 0 评论 -
JUC并发编程系列详解篇十(Synchronized底层原理分析)
synchronized 锁机制在 Java 虚拟机中的同步是基于进入和退出监视器锁对象 monitor 实现的(无论是显示同步还是隐式同步都是如此),每个对象的对象头都关联着一个 monitor 对象,当一个 monitor 被某个线程持有后,它便处于锁定状态。原创 2022-09-11 00:30:16 · 290 阅读 · 0 评论 -
JUC并发编程系列详解篇九(synchronized基础)
在JVM中,对象在内存中的布局分为三块区域:对象头、实例数据和对齐填充。对象头又包括两部分信息,第一部分用于存储对象自身的运行时数据(Mark Word),如HashCode、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等。对象头的另外一部分是类型指针(Klass pointer),即对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例。原创 2022-09-10 23:16:14 · 492 阅读 · 0 评论 -
JUC并发编程系列详解篇六(死锁的基本概念)
银行家算法是一种最有代表性的避免死锁的算法。在避免死锁方法中允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次分配资源的安全性,这就需要引入安全序列来进行判断资源分配是否合理。安全序列是指一个进程序列比如从P1到Pn是安全的,即对于每一个进程Pi(1≤i≤n),它以后尚需要的资源量不超过系统当前剩余资源量与所有进程Pj (j < i )当前占有资源量之和。原创 2022-09-10 14:56:00 · 194 阅读 · 0 评论 -
JUC并发编程系列详解篇五(线程基础理论进阶)
什么是线程安全?当多线程运行了同一代码的时候,如果产生了不同的结果会怎么样?就好比如家里养的鸡下的蛋结果却孵出来一个老鹰,这怎么也显得不合适了,所以线程安全说白了就一句话,当多线程运行同一代码,不会产生不一样的结果。即代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。在多线程环境中,当各线程不共享数据的时候,即都是私有(private)成员,那么一定是线程安全的。原创 2022-09-10 14:52:36 · 142 阅读 · 0 评论 -
JUC并发编程系列详解篇四(线程基础理论)
这其实是很有意义的,首先多线程的运行和单线程运行相比有很多复杂困难的问题,因为多线程运行充满了未知性,比如说某条线程是否运行,运行了多少时间,线程所期望的数据是否已经赋值完毕,Callable接口的泛型的Future/FutureTask却可以获取多线程运行的结果,可以在等待时间太长没获取到需要的数据的情况下取消该线程的任务。如果线程池的大小超过了处理任务所需要的线程,那么就会回收部分空闲(60秒不执行任务)的线程,当任务数增加时,此线程池又可以智能的添加新线程来处理任务。创建一个单线程的线程池。原创 2022-09-10 14:36:06 · 173 阅读 · 0 评论 -
JUC并发编程系列详解篇三(三大根源性问题)
对于如今的多核处理器,每颗CPU都有自己的缓存,缓存读取的速度非常快,但是缓存仅仅对它所在的处理器可见,CPU缓存与内存的数据不容易保证一致。因此为了避免处理器停顿下来等待向内存写入数据而产生的延迟,处理器使用写缓冲区来临时保存向内存写入的数据。写缓冲区合并对同一内存地址的多次写,并以批处理的方式刷新,也就是说写缓冲区不会即时将数据刷新到主内存中。这个时候缓存不能及时刷新向内存中写入数据,这就导致了可见性问题。原创 2022-09-10 14:05:13 · 97 阅读 · 0 评论 -
JUC并发编程系列详解篇二(并发编程挑战篇)
资源限制是指在进行并发编程时,程序的执行速度受限于计算机硬件资源或软件资源。举例说明:例如,服务器的带宽只有2Mb/s,某个资源的下载速度是1Mb/s每秒,系统启动10个线程下载资源,下载速度不会变成10Mb/s,所以在进行并发编程时,要考虑这些资源的限制。硬件资源限制有带宽的上传/下载速度、硬盘读写速度和CPU的处理速度。软件资源限制有数据库的连接数和socket连接数等。原创 2022-09-10 13:48:07 · 124 阅读 · 0 评论 -
JUC并发编程系列详解篇八(volatile关键字的应用场景)
java并发编程知识体系详解篇六(volatile关键字的应用场景)原创 2022-04-21 23:27:19 · 670 阅读 · 0 评论 -
JUC并发编程系列详解篇七(volatile关键字详解)
java并发编程知识体系详解篇五(volatile关键字详解)原创 2022-03-30 23:42:14 · 1036 阅读 · 0 评论