
并发编程
Rainly2000
硕士在读,口头禅是 业精于勤荒于嬉,行成于思毁于随,人生有着无限的可能不要轻易给自己设限
展开
-
线程池执行原理(执行流程)
面试的时候没答对,仔细复盘了一下源码,记录一下线程池执行的流程如下:1、当一个任务到来的时候会判断核心线程数是否已经满了,(注意核心线程数是否会被回收是根据 参数 allowCoreThreadTimeout()来确定,默认为false,即核心线程数并不会被回收,设置为true时则会与常规线程一样当keepalive time到达的时候会被回收)未满则分配一个核心线程,满了则放置到等待队列中去2、当队列未满则会将任务添加到队列当中去,满了则会判断是否达到最大线程数3、达到了最大线程数的数量就会出发rej原创 2022-06-07 17:39:05 · 561 阅读 · 0 评论 -
浅析java Syncronized关键字底层的实现原理
syncronized关键字底层实现原理:Java 对象底层都关联一个的 monitor,使用 synchronized 时 JVM 会根据使用环境找到对象的 monitor,根据 monitor 的状态进行加解锁的判断。如果成功加锁就成为该 monitor 的唯一持有者,monitor 在被释放前不能再被其他线程获取。synchronized在JVM编译后会产生monitorenter 和 monitorexit 这两个字节码指令,获取和释放 monitor。这两个字节码指令都需要一个引用类型的参数指原创 2022-05-25 20:19:16 · 153 阅读 · 0 评论 -
为什么CAP不能同时满足
CAP是分布式存储的理论基石,分别由:1、C consistency 一致性2、A available 可用性3、P partition tolerance 分区容错性由于现代的分布式系统都是存储在不同的机器上的,通过网络进行数据的交互,而网络就会存在延时和传输等问题,当出现上述问题时我们就无确保数据的实时性共享,所以此时要么等待数据一致,要么抛弃部分服务确保其他服务的可用,即我们常说的可用性与一致性不可共存的原因。这也就解释了为什么CAP往往只能满足其二...原创 2022-03-06 16:08:48 · 354 阅读 · 0 评论 -
(大话并发) : java wait方法为什么要在 synchronized 方法块中调用
一、wait方法的调用需要该线程首先获得对象的监视器之所以有这样的一项规定就是为了避免一下几个问题:1、无效唤醒 Lost Wakeup上面只是说明了 wait、notify、notifyAll 必须放在 synchronized 同步块中,但是并没有解释到底是为什么。我们不妨方向思考一波,如果不要求 wait 方法放在同步块中,而是可以随意调用,会怎样呢?如下一段代码所示:// 生产者伪代码Producer: count ++; notify();// 消费者伪代码Consumer原创 2022-01-12 23:58:43 · 657 阅读 · 0 评论 -
syncronized底层原理之Java 对象头详解
在HotSpot虚拟机里,对象在堆内存中的存储布局可以划分为三个部分:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。其中,如果对象是数组类型,则虚拟机用 3 个字宽(Word)存储对象头(Mard Word、类型指针、数组长度),如果对象是非数组类型,则用 2 字宽存储对象头(Mard Word、类型指针)。在 32 位虚拟机中,1 字宽等于 4 字节,即 32 bit,如下图所示:...原创 2022-01-10 23:21:25 · 401 阅读 · 0 评论 -
zookeeper实现屏障锁
代码如下:import java.io.IOException;import java.net.InetAddress;import java.net.UnknownHostException;import java.nio.ByteBuffer;import java.util.List;import java.util.Random;import org.apache.zookeeper.CreateMode;import org.apache.zookeeper.KeeperExce原创 2022-01-03 22:22:09 · 89 阅读 · 0 评论 -
JMM模型的 8 条 Happens-before 规则
1)程序次序规则(Program Order Rule):在一个线程内,按照控制流顺序,书写在前面的操作先行发生(Happens-before)于书写在后面的操作。注意,这里说的是控制流顺序而不是程序代码顺序,因为要考虑分支、循环等结构。2)管程锁定规则(Monitor Lock Rule):一个 unlock 操作先行发生于后面对同一个锁的 lock 操作。这里必须强调的是 “同一个锁”,而 “后面” 是指时间上的先后。3)volatile 变量规则(Volatile Variable Rule):对原创 2022-01-03 16:10:57 · 334 阅读 · 0 评论 -
详解 Java 内存模型与原子性、可见性、有序性
原子性什么是原子性类比物理机,拥有缓存一致性协议来规定主内存和高速缓存之间的操作逻辑,那么 JMM 中主内存与工作内存之间有没有具体的交互协议呢?Of Course!JMM 中定义了以下 8 种操作规范来完成一个变量从主内存拷贝到工作内存、以及从工作内存同步回主内存这一类的实现细节。Java 虚拟机实现时必须保证下面提及的每一种操作都是原子的、不可再分的。暂时放下到底是哪 8 种操作,我们先谈何为原子?原子(atomic)本意是 “不能被进一步分割的最小粒子”,而原子操作(atomic opera原创 2022-01-03 00:31:00 · 315 阅读 · 0 评论 -
java线程与操作系统线程的区别
用户空间和内核空间关于内核态和用户态可以参考这篇文章:了解操作系统的那些事儿,从这篇文章开始,这里不再过多赘述。至于什么是系统空间和用户空间也非常好理解:在操作系统中,内存通常会被分成用户空间(User space)与内核空间(Kernel space)这两个部分。当进程/线程运行在用户空间时就处于用户态,运行在内核空间时就处于内核态:运行在内核态的程序可以访问用户空间和内核空间,或者说它可以访问计算机的任何资源,不受限制,为所欲为,例如协调 CPU 资源,分配内存资源,提供稳定的环境供应用程序运.原创 2022-01-01 22:32:57 · 886 阅读 · 0 评论