自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 并发编程-ConcurrentHashMap

红黑树是一种特殊的二叉查找树(特殊的平衡二叉树),其中每个节点都包含一个颜色属性,颜色为红色或黑色。这种数据结构通过颜色和特定规则的约束,在插入、删除等操作时保持树的平衡性,从而确保所有操作的平均时间复杂度为O(log n),其中n是树中元素的数量本篇内容篇幅比较长,但仍旧无法覆盖到 ConcurrentHashMap 的方方面面,感兴趣的小伙伴也可自行阅读其他源码。整体来说我们也是围绕着核心逻辑作了一下分析。

2024-06-30 13:46:52 218

原创 并发编程-ThreadLocal

本篇我们对ThreadLocal进行了深入的分析,我们知道了它是利用了ThreadLocalMap实现的线程隔离。通过源码分析我们也了解它是如何通过线性探索去发现无效的且需要清理的对象。虽然平常使用ThreadLocal比较少,但是它的实现思想还是值得借鉴和学习的。

2024-04-13 13:55:29 793

原创 并发编程-并发工具类

本篇我们着重讲述了三个并发的工具类 CountDownLatch、Semaphore、CyclicBarrier的使用及原理。他们三个在功能实现效果上有些相似,具体使用还得结合业务场景灵活选择。其中 CountDownLatch与Semaphore 都是基于AQS共享锁的特性来实现的,而CyclicBarrier则是利用的 ReentrantLock 和Condition实现的,整体上CyclicBarrier比较简单。若文中出现错误之处,还请批评指正。

2024-03-30 13:07:15 880

原创 并发编程-BlockingQueue

堆(Heap)是计算机科学中一类特殊的数据结构的统称。堆通常可以被看作是一棵完全二叉树(在逻辑层面上),而物理层面上,它常常被实现为一个数组对象。堆中某个节点的值总是不大于(或不小于)其父节点的值。堆总是一棵完全二叉树。根据根节点的大小,堆可以被分为两种类型:最大堆(或大根堆)和最小堆(或小根堆)。在最大堆中,根节点的值是最大的,而在最小堆中,根节点的值是最小的。常见的堆有二叉堆、斐波那契堆等。堆常被用于在一组变化频繁的数据中寻找最值,例如在优先级队列中,最高(或最低)优先级的元素总是位于堆的根节点。

2024-03-10 14:10:22 2049

原创 并发编程-Condition

本篇我们先是通过wait()/notify()来了解了线程通信的机制。因为wait()/notify()是JVM层面控制的,我们无法窥探它的源码。好在J.U.C中提供了Condition,可以把它理解为wait()/notify()的平替,但它们的原理是相通的,都是在持有同一把锁的基础上,通过线程的阻塞和唤醒来实现的线程通信。Condition在我们日常开发中基本不会用到,但它更多会出现在其他中间件的源码中,所以了解它的核心原理也是有必要的。

2024-02-03 14:40:49 763

原创 并发编程-Lock

从本篇开始就正式进入到 J.U.C 并发包里面主要工具的解析,终于可以暂时不用关注像 synchronized 和 volatile关键字所涉及到的硬件层面相关的知识了。J.U.C 一个简称,它的核心是在 rt.jar这个包中 路径是 java.util.concurrent从上图中我们可以看到。在J.U.C中有个Lock接口,顾名思义它是一个锁和synchronized 的作用类似,都是保证线程安全性的选择,那么我们就以Lock作为J.U.C的开端。

2024-02-03 14:34:37 827

原创 并发编程-volatile

对于可见性问题我们可以这样进行理解:一个线程修改了共享变量,另一个线程不能立刻看到。这跟我们数据库中事务问题有些相似,我们通过一段代码来感受一下可见性问题int i=0;while(!stop){i++;});t1.start();System.out.println("t1线程执行-----");stop=true;这段代码的含义是t1线程通过stop来判断执行i++的操作,我们在main方法中将stop修改成true 理论上t1中的while循环会停止,整个代码执行结束。

2024-02-03 14:09:46 1401

原创 并发编程-synchronized

​ 线程安全性是指多个线程对共享的数据进行访问和操作时,不会出现不一致或不可预料的结果。在多线程境下,如果多个线程同时访问共享数据,可能会导致数据的不一致性或错误的结果,这种问题称为线程安全问题。为了保证线程安全性,需要采用合适的并发控制手段来保护共享数据的访问和操作。稍微总结一下,做一个梳理。我们由一开始的猜测synchronized常规做法是设定一个状态status 有锁和无锁就是修改status的值(0和1)。为了验证猜测我们查看了对象头的信息,发现有锁和无锁状态下对象头信息是不一样的。

2024-02-03 13:37:32 1703

原创 并发编程-Thread

要想研究并发编程首先得了解线程、进程、CPU他们三个之间的联系可以简单的理解为 一个进程里边包含多个线程,进程代表的就是电脑上启动的软件,统一都是由cpu通过切换时间片来进行调度。再举个例子,进程就好比一个工厂里的生产线,它有生产任务。线程就好比生产线上的工人,它们一起协作才能完成生产任务。每个工人(线程)干的活也不一样。那cpu就像老板,将不同的工序分配给不同的工人。总的来说通过合理地组织进程和线程的分工,并充分利用CPU的计算能力,可以有效地提高计算机的处理效率。

2024-02-03 13:17:26 809

空空如也

空空如也

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

TA关注的人

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