- 博客(6)
- 收藏
- 关注
原创 并发编程-BlockingQueue
堆(Heap)是计算机科学中一类特殊的数据结构的统称。堆通常可以被看作是一棵完全二叉树(在逻辑层面上),而物理层面上,它常常被实现为一个数组对象。堆中某个节点的值总是不大于(或不小于)其父节点的值。堆总是一棵完全二叉树。根据根节点的大小,堆可以被分为两种类型:最大堆(或大根堆)和最小堆(或小根堆)。在最大堆中,根节点的值是最大的,而在最小堆中,根节点的值是最小的。常见的堆有二叉堆、斐波那契堆等。堆常被用于在一组变化频繁的数据中寻找最值,例如在优先级队列中,最高(或最低)优先级的元素总是位于堆的根节点。
2024-03-10 14:10:22 1067
原创 并发编程-Condition
本篇我们先是通过wait()/notify()来了解了线程通信的机制。因为wait()/notify()是JVM层面控制的,我们无法窥探它的源码。好在J.U.C中提供了Condition,可以把它理解为wait()/notify()的平替,但它们的原理是相通的,都是在持有同一把锁的基础上,通过线程的阻塞和唤醒来实现的线程通信。Condition在我们日常开发中基本不会用到,但它更多会出现在其他中间件的源码中,所以了解它的核心原理也是有必要的。
2024-02-03 14:40:49 737
原创 并发编程-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 809
原创 并发编程-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 881
原创 并发编程-synchronized
线程安全性是指多个线程对共享的数据进行访问和操作时,不会出现不一致或不可预料的结果。在多线程境下,如果多个线程同时访问共享数据,可能会导致数据的不一致性或错误的结果,这种问题称为线程安全问题。为了保证线程安全性,需要采用合适的并发控制手段来保护共享数据的访问和操作。稍微总结一下,做一个梳理。我们由一开始的猜测synchronized常规做法是设定一个状态status 有锁和无锁就是修改status的值(0和1)。为了验证猜测我们查看了对象头的信息,发现有锁和无锁状态下对象头信息是不一样的。
2024-02-03 13:37:32 902
原创 并发编程-Thread
要想研究并发编程首先得了解线程、进程、CPU他们三个之间的联系可以简单的理解为 一个进程里边包含多个线程,进程代表的就是电脑上启动的软件,统一都是由cpu通过切换时间片来进行调度。再举个例子,进程就好比一个工厂里的生产线,它有生产任务。线程就好比生产线上的工人,它们一起协作才能完成生产任务。每个工人(线程)干的活也不一样。那cpu就像老板,将不同的工序分配给不同的工人。总的来说通过合理地组织进程和线程的分工,并充分利用CPU的计算能力,可以有效地提高计算机的处理效率。
2024-02-03 13:17:26 798
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人