自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 收藏
  • 关注

原创 JVM分代和垃圾回收算法浅析

加上老年代就这三个区。并将其年龄设为1,对象在Survivor每熬过一次Minor GC,年龄就加1,当年龄达到一定的程度(默认为15)时,就会被晋升到老年代中了,当然晋升老年代的年龄是可以设置的。Major GC是老年代GC,指的是发生在老年代的GC,通常执行Major GC会连着Minor GC一起执行。Survivor的存在意义,就是减少被送到老年代的对象,进而减少Full GC的发生,Survivor的预筛选保证,只有经历15次Minor GC还能在新生代中存活的对象,才会被送到老年代。

2024-03-03 15:37:22 277

原创 SpringBoot浅析

22。

2023-10-06 13:01:18 89

原创 Lambda表达式特性之延迟执行

1.lambda表达式具有延迟执行的特性,在特定的场合下使用lambda表达式,会让你的程序效率有不小的提升。2.但是使用lambda表达式需要和函数式接口配合使用。例如Spring解决AOP时候的循环依赖问题,当使用AOP的时候,需要使用代理对象替换掉原始对象。但是代理对象的创建是在初始化过程的拓展阶段,而属性的赋值(populateBean())是在生成代理对象之前执行的,那么就需要在属性赋值的时候判断是否需要生成代理对象。那么为什么非要使用lambda表达式的机制来完成呢?

2023-10-06 11:13:17 295

原创 ForkAndJoin->RecursiveTask

Java 7开始引入了一种新的Fork/Join线程池,它可以执行一种特殊的任务:把一个大任务拆成多个小任务并行执行。Java7引入了Fork/Join框架,我们通过这个类就可以方便地实现Fork/Join模式。

2023-09-26 10:03:00 86

原创 Spring浅析

5。

2023-09-16 12:02:12 60

原创 Java抽象类与接口的设计理念差异

第三种,如果我们对问题域的理解是这样的:AlarmDoor本质上Door,但同时它也拥有报警的行为功能,这个时候我们使用第三种方案恰好可以阐述我们的设计意图。其实抽象类表示的是”is-a”关系,接口表示的是”like-a”关系,大家在选择时可以作为一个依据,当然这是建立在对问题领域的理解上的,比如:如果我们认为AlarmDoor在概念本质上是报警器,同时又具有Door的功能,那么上述的定义方式就要反过来了。”关系,即接口与实现类的关系只是实现了定义的行为,并无本质上的联系(契约关系,很淡漠的利益关系)。

2023-09-16 10:38:47 64

原创 ConcurrentHashMap浅析

当线程A执行map.get的时候,其它线程可能正在执行map.put,这样一来当线程A执行到map.put的时候,线程A的值就已经是脏数据了,然后脏数据覆盖了真值,导致线程不安全。在获取数组中i索引位置数据的时候,使用数组长度-1(n-1)的方式,因为数组长度为2的n次方倍,所以数组长度的二进制数低位一般为0。简单地说,ConcurrentHashMap的get方法获取到的是此时的真值,但它并不保证当你调用put方法的时候,当时获取到的值仍然是真值。ConcurrentHashMap的线程安全指的是。

2023-09-09 16:26:08 58

原创 JAVA的位运算

二元运算符,两个为1时结果为1,否则为0:二元运算符,两个其中有一个为1时结果就为1,否则为0:二元运算符,两个数同时为1或0时结果为1,否则为0:一元运算符,取反操作:一元运算符,按位左移一定的位置。高位溢出,低位补符号位,符号位不变。:一元运算符,按位右移一定的位置。高位补符号位,符号位不变,低位溢出。:一元运算符,符号位(即最高位)保留,其它位置向右移动,高位补零,低位溢出。

2023-09-09 11:57:09 114

原创 ReentrantLock浅析

因为在该线程被挂起的时候需要保证当前节点的前一个节点状态是正常的,如果前一个节点状态不正常,则需要把当前节点排队到当前节点的前一个节点的前一个节点,以此类推),最终排在有效节点后,才会将当前节点的线程挂起来。if (!如果当前节点是head的下一个,则直接尝试获取锁资源。

2023-08-19 15:55:35 33

原创 线程-interrupt方法详解

是使用stop方法,使用stop方法虽然可以强行终止正在运行或挂起的线程,但使用stop方法是很危险的。stop 方法会真正杀死线程,如果这时线程锁住了共享资源,那么当它被杀死后就再也没有机会释放锁, 其它线程将永远无法获取锁。标记值变成了false,这里再打断一下,就相当于把这个正在运行的线程给打断了,所以这里的标记值又变成了ture,如果这里不重置这个标记值那么这个线程是会一直运行。(终止运行,继续运行,做一些善后工作等等)以便优雅的停止线程,而且这个打断阻塞中的线程是会重置标状态为false;

2023-08-19 11:41:54 99

原创 浅析ThreadPoolExecutor

int maximumPoolSize, //核心线程数long keepAliveTime, //最大线程数TimeUnit unit, //keepAlive的时间BlockingQueue workQueue, //keepAlive的时间的单位ThreadFactory threadFactory, //线程工厂RejectedExecutionHandler handler) { //拒接策略。

2023-08-12 11:19:58 47 1

原创 newScheduledThreadPool : scheduleAtFixedRate 与 scheduleWithFixedDelay 详解

官方解释 : 创建并执行一个周期性操作,该操作在给定的初始延迟之后首先启用,然后在给定的时间段内启用;也就是说,执行将在initialDelay之后开始,然后是initialDelay+period,然后是initialDelay+2*period,依此类推。如果任务的任何执行遇到异常,则禁止后续执行。否则,只能通过取消或终止执行者来终止任务。如果此任务的任何执行时间长于其周期,则后续执行可能会延迟开始,但不会同时执行。执行逻辑 : initiaDelay时间结束后,从上一个任务开始计时。

2023-08-07 21:47:23 577 1

原创 使用FutureTask和CompletableFuture对并行任务进行优化

【代码】使用FutureTask和CompletableFuture对并行任务进行优化。

2023-08-06 12:41:16 170

原创 分布式事务

【代码】分布式事务。

2023-08-06 12:38:09 39

原创 Mysql索引

Mysql索引_索引 range_吼吼权的博客-CSDN博客

2023-07-30 14:19:45 31 1

原创 浅析MySQL索引下推

索引下推(Index Condition Pushdown,简称ICP),是MySQL5.6版本的新特性,它能减少回表查询次数,提高查询效率。

2023-07-30 13:56:07 35 1

原创 Mysql常见的集群方案

原文链接:https://blog.csdn.net/echizao1839/article/details/131634231。

2023-07-30 13:37:31 39 1

原创 mysql中的自增id超出上限的问题

其实对于bigint 类型id超出上限的问题,我们可以换个角度想一下,如果表的自增主键达到了这个上限,那么表中的数据量也是一个天文数据了,那么在这个表的业务操作,也基本上操作不动了,绝大部分业务,都会在表数据量达到这个上限前,进行表的切分。这些自增id,都是定义了初始值,然后不停的累加步长。对于每一种自增id,在mysql中都会定义其数据类型,以及这个数据类型所占用的字节长度,也就是说每个自增id,都是有上限的,只不过上限的大小不尽相同而已,既然自增id有上限,那么就有可能被用完,那问题来了,

2023-07-30 13:09:17 781 1

原创 浅析Monitor Object

synchronized保证线程同步的作用相信大家都已经非常熟悉了,可以把任意一个对象当作锁。synchronized 关键字无论是修饰代码块,还是修饰实例方法和静态方法,

2023-07-30 10:03:45 374 1

原创 线程交替执行经典问题(生产者和消费者问题)

让两个线程交替打印出1A2B3C4D5E6F?

2023-07-30 08:59:05 96 1

原创 JAVA-死锁的模拟和解决办法

有 5 个哲学家,他们面前都有一双筷子,即左手有一根筷子,右手有一根筷子。哲学家左手要拿到一根筷子,右手也要拿到一根筷子,在这种情况下哲学家才能吃饭。死锁:如果每个哲学家都同时拿起左手的筷子,那么就形成了环形依赖,在这种特殊的情况下,,自然也就没有人会放下手中的筷子。这就陷入了死锁,形成了一个相互等待的情况。

2023-07-29 13:57:37 162

原创 Java的四种引用(强引用,软引用,弱引用,虚引用)

StrongReference(强引用) 、SoftReferenc(软引用) 、WeakReferenc(弱引用)、PhantomReference(虚引用),虽然不常用,但是对于理解Java的回收等级还是很有帮助的,一句话来说这些引用只是不同回收等级的一种表现形式。

2023-07-24 22:05:27 98

原创 线程池的工具类

【代码】线程池的工具类。

2023-07-23 16:21:54 1239

原创 深入并发之线程、进程、纤程、协程、管程与死锁、活锁|详解

线程和携程效率对比示例:Thread。

2023-07-23 16:14:24 196

原创 线程的join和yield

主要作用是同步,它可以使得线程之间的。在A线程中调用了B线程的join()方法时,表示只有当B线程执行完毕时,A线程才能继续执行。调用这个方法的线程将被阻塞,即A进入阻塞状态。- 方法join(long)的功能在内部是使用wait(long)方法来实现的,所以join(long)方法具有释放锁的特点。但是sleep(long)不释放锁。

2023-07-23 15:41:36 307

原创 disruptor原理详解

在现在的CPU中,每次从主内存读取数据到L3级缓存的大小是,也叫做。CPU找数据的过程:CPU->L1->L2->L3->主内存;CPU更新数据的过程也是如此。CPU从内存加载数据的过程:L3->L2->L1->CPU在多线程开发中,我们常常遇到这样一种场景:一些线程接受用户请求,另外一些线程处理这些请求。比如日志处理中的日志输入和告警。这种典型的生产者消费者场景十分常见,而生产者消费者模式的核心就是阻塞队列。

2023-07-23 15:06:58 484

原创 P5面试简要

就是两个值之间的间隙。为了解决幻读问题,InnoDB 只好引入新的锁,也就是 间隙锁 (Gap Lock)。幻读仅专指“新插入的行”。

2023-07-23 13:26:47 15

原创 JVM调优涉及的参数

2023-07-23 10:52:15 19

原创 锁的四种状态与锁升级过程 图文详解

无锁、偏向锁、轻量级锁、重量级锁,这四种锁状态分别代表什么,为什么会有锁升级?其实在 JDK 1.6之前,synchronized 还是一个重量级锁,是一个效率比较低下的锁,但是在JDK 1.6后,Jvm为了提高锁的获取与释放效率对()进行了优化,引入了偏向锁 和 轻量级锁,从此以后锁的状态就有了四种(无锁、偏向锁、轻量级锁、重量级锁),并且四种状态会随着竞争的情况逐渐升级,而且是不可逆的过程,即不可降级,也就是说只能进行锁升级(从低级别到高级别),不能锁降级(高级别到低级别)

2023-07-20 22:53:59 3518

原创 Java并发编程

即JVM向操作系统申请一把锁,这就涉及到用户态向内核态的一个调用(0X80的调用过程),申请锁的的时候要经过一个中断的调用,即从用户态->内核态->用户态。CAS在在内存中比较在往回写的过程中( 使用lock cmpxchg指令),在最终的底层,在执行compareAndSwap的过程中,即CPU在对内存进行操作的过程中,不允许其他的CPU访问这个内存,不允许其他的CPU打断我的操作。如T = new T();工具JOL=Java object layout。如何避免ABA问题?版本号(数据型和布尔型)

2023-07-09 22:40:15 84 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除