- 博客(125)
- 收藏
- 关注
原创 【java并发编程的艺术读书笔记】java中的并发工具类(CountDownLatch、CyclicBarrier、Semaphore、Exchanger)
其实现原理是不停检查join线程是否存活,如果join线程存活则让当前线程永远等待。由于countDown方法可以用在任何地方,所以这里说的N个点,可以是N个线程,也可以是1个线程里的N个执行步骤。它提供一个同步点,在这个同步点,两个线程可以交换彼此的数据。,当两个线程都到达同步点时,这两个线程就可以交换数据,将本线程生产出来的数据传递给对方。因为没有第三个线程执行await方法,即没有第三个线程到达屏障,所以之前到达屏障的两个。例如,如果计算发生错误,可以重置计数器,并让线程重新执行一次。
2023-08-28 14:48:16
127
原创 【java并发编程的艺术读书笔记】ConcurrentHashMap是如何保证线程安全的
ConcurrentHashMap 使用了分段锁的机制,将哈希表分成多个段(Segment),每个段都拥有自己的锁。:ConcurrentHashMap 提供了一种安全的迭代器,可以在迭代时进行并发的读操作,而不会导致 ConcurrentModificationException 异常。:由于使用了分段锁,不同段的操作可以并行执行,这使得 ConcurrentHashMap 在多线程环境下能够提供较高的并发性能,同时避免了传统 HashMap 的并发问题。并发环境下HashMap可能会导致程序死循环,
2023-08-28 14:44:45
175
原创 【java并发编程的艺术读书笔记】AQS队列同步器简介、实现自定义锁
AQS)是 Java 并发包(java.util.concurrent)中一个重要的基础类,用于实现同步器(Synchronizer)的框架。AQS 提供了一种基于 FIFO 等待队列的机制,使得开发者可以相对容易地实现各种自定义的同步组件,例如锁、信号量、倒计时门栓等。AQS 主要是一个抽象类,它定义了一些基本的同步操作,而具体的同步逻辑需要子类继承并实现。AQS 内部维护了一个等待队列,用于管理等待获取同步状态的线程。AQS 的核心思想是,通过维护一个 state 变量来表示同步状态。
2023-08-28 14:38:30
174
原创 【java并发编程的艺术读书笔记】Lock接口简介、Condition类的使用、可重入锁与读写锁
Lock 接口是用于实现线程同步的一种机制。它提供了比传统的synchronized关键字更灵活和可扩展的方式来管理多个线程对共享资源的访问。Lock 接口的主要目标是解决synchronized关键字的一些限制,例如无法中断正在等待锁的线程不能尝试获取锁而立即放弃等待不能在等待一段时间后获取锁等等。
2023-08-28 14:24:04
169
原创 【并发编程的艺术读书笔记】synchronized锁升级机制详解
synchronized在早期被称为重量级锁,而到现在已经得到不少优化。偏向锁、轻量级锁、重量级锁指的是synchronized三种形态。
2023-08-22 11:43:53
116
原创 【深入理解jvm读书笔记】运行时数据区域有哪些
介绍各个运行时数据区域(程序计数器、java虚拟机栈、本地方法栈、java堆、方法区、运行时常量池)分别储存哪些数据,线程间是否共享
2023-08-21 16:44:18
265
原创 【深入理解jvm读书笔记】如何判断一个java对象是否已经死亡
当前主流的商用程序语言(Java、C#,上溯至前面提到的古老的Lisp)的内存管理子系统,都是通过可达性分析(Reachability Analysis)算法来判定对象是否存活的。缺点:占用了一些额外的内存空间,这个看似简单的算法有很多例外情况要考虑,必须要配合大量额外处理才能保证正确地工作,譬如单纯的引用计数就很难解决对象之间相互循环引用的问题。根据用户所选用的垃圾收集器以及当前回收的内存区域不同,还可以有其他对象“临时性”地加入,共同构成完整GC Roots集合。,搜索过程所走过的路径称为。
2023-08-21 16:33:57
147
原创 【深入理解jvm读书笔记】jvm如何进行内存分配
一般来说(由字节码流中new指令后面是否跟随invokespecial指令所决定,Java编译器会在遇到new关键字的地方同时生成这两条字节码指令,但如果直接通过其他方式产生的则不一定如此),new指令之后会接着执行init()方法,按照程序员的意愿对对象进行初始化,这样一个真正可用的对象才算完全被构造出来。其实第一种方案就是给分配内存的操作加锁,指针碰撞的时候每个线程都不断尝试获取锁,而拿到锁的线程只有分配完对象内存空间并且修改指针后,才释放锁并通知其他线程,保证原子性。,这种情况的处理方案有两种。
2023-08-21 16:29:47
693
原创 【数据结构】回溯算法公式化解题 leetcode经典题目带刷:全排列、组合、子集
回溯算法(Backtracking Algorithm)是一种解决组合问题排列问题选择问题等一类问题的常用算法。它通过尝试所有可能的选择来找到问题的解,当发现当前选择不符合要求时,就回溯到之前的状态,然后尝试其他的选择。如果认真看完的朋友可以发现,对于这种基础的回溯题目,我们都可以通过循环+回溯来解决问题,只需要根据具体问题来更改我们的循环条件即可。当然这么做不一定是最好的,还有许多可以优化的地方,只是说大部分情况可以通过这种循环的方式来解决问题。
2023-08-21 16:22:57
887
原创 【仿写tomcat】四、解析http请求信息,响应给前端,HttpServletRequest、HttpServletResponse的简单实现
仿写tomcat
2023-08-17 13:03:11
1251
原创 【spring】spring bean的生命周期
本文测试并且介绍了spring中bean的生命周期,如果只想知道结果可以跳到最后一部分直接查看。
2023-07-27 16:02:38
1107
原创 【并发编程的艺术读书笔记】synchronized关键字与对象锁、类锁
本文介绍了synchronized关键字,并给出了对象锁,类锁的案例以及对书中死锁案例的分析。
2023-07-24 15:49:00
246
原创 【java】java中注解的简介,如何自定义注解,有哪些类型,有什么作用
Java 注解用于为 Java 代码提供元数据。作为元数据,注解不直接影响你的代码执行,但也有一些类型的注解实际上可以用于这一目的。Java 注解是从 Java5 开始添加到 Java 的。首先要明确一点的是,注解并没有实际的作用,注解只是起到了标记的作用,仅此而已。
2023-07-22 21:27:46
259
原创 【仿写spring之mvc篇】一、通过反射读取带有@RequestMapping与@Controller注解的类并模拟请求路径调用方法
通过反射读取带有@RequestMapping与@Controller注解的类并模拟请求路径调用方法
2023-07-22 21:20:08
1198
原创 【vue2+element ui】添加修改共用表单的下拉框回显问题分析以及解决方案(附共用表单代码)
本人前端水平不佳,本文分享在编写个人项目前端代码的时候遇到的回显问题的解决办法,仅供参考。
2023-07-20 10:47:03
4308
原创 【SpringBoot】从零开始封装自己的starter并且引入到其他项目中使用
本文将介绍如何从零开始封装自己的starter并且引入到其他项目中使用
2023-07-18 15:49:55
4049
原创 【java】三大容器类(List、Set、Map)的常用实现类的特点
本文总结三大容器类(List、Set、Map)的常用实现类(ArrayList、Vector、LinkedList、HashSet、HashMap、HashTable)的特点。
2023-07-18 14:16:53
300
原创 【java】泛型与Object的区别,如何在实际场景中选择泛型以及Object
本文介绍泛型与Object的区别,如何在实际场景中选择泛型以及Object
2023-07-18 11:54:32
1584
原创 【java】源码配合实践一文弄清楚为什么重写equals一定要重写hashcode
本文会带各位从源码的角度以及实际应用案例探究为什么重写equals一定要重写hashcode。
2023-07-18 10:57:42
86
原创 【EasyExcel】在SpringBoot+VUE项目中引入EasyExcel实现对数据的导出(封装工具类)
封装easy excel工具类,实现后端导出以及下载功能
2023-07-17 17:50:00
2660
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人