- 博客(64)
- 收藏
- 关注
原创 CompletableFuture 的统一异常处理及超时处理
项目中需要调用多个服务,如果使用 open-Feign 串行化调用,响应时间可能会比较长,后续使用了 CompletableFuture 和线程池进行异步调用,但是在调用时,可能存在调用的服务报错,导致整个查询方法直接抛出异常,无法继续后面的操作,抽象了工具类 AsyncUtil 集中处理调用信息和异常信息,可以看到即使调用服务发生了异常,也能继续执行,发生异常后记录了报错信息且返回给前端状态信息。现在我想捕获调用时的异常,且不影响后续的执行。正常情况下执行也没有问题。
2025-03-17 21:11:38
218
原创 【Linux】解决由于 network和 NetworkManager不兼容,导致的网络服务错误
解决由于network和NetworkManager 服务不兼容问题导致的网络服务错误。例如无法获取ip,无法连接网络等。
2024-06-11 16:35:56
4080
原创 Maven常见的打包指令——package、install、deploy的区别
Maven中常用的打包命令有三种,package、install和deploy。
2024-05-06 15:04:55
1051
原创 【MySQL】常用的MySQL工具
常用的mysql工具,包含mysqlbinlog,mysqlimport/source,mysqldump等
2024-04-24 10:46:55
279
2
原创 【MySQL】SQL优化
MySQL的优化,例如插入优化,主键优化,order by优化,group by优化,limit优化,count优化等。
2024-04-22 21:15:59
2420
8
原创 Zookeeper的集群搭建和ZAB协议详解
Zookeeper的集群搭建和ZAB协议详解,包括Zookeeper集群中的Leader节点的选举,崩溃恢复及数据的主从同步。
2024-04-12 19:07:59
2328
原创 JUC并发编程——对CAS的理解和分析
CAS(CompareAndSet 或 CompareAndSwap)又称 无锁,乐观锁,实现方式是非阻塞同步。CAS指令有三个操作数,分别是内存位置(在Java中可以简单地理解为变量的内存地址,用V表示)、旧的预期值(用A表示)和准备设置的新值(用B表示)。CAS指令执行时,当且仅当V符合A时,处理器才会用B更新V的值,否则它就不执行更新。但是,不管是否更新了V的值,都会返回V的旧值,上述的处理过程是一个操作,执行期间不会被其他线程中断。CAS指令的底层是原子操作,保证了原子性,解决了指令交错问题。
2024-04-02 16:53:03
365
原创 JUC并发编程—— 对volatile的理解及DCL的解决方法
volatile 的底层实现原理是加入 volatile 关键字后,写指令(被 volatile 修饰的变量在对此变量修改时)会加入写屏障,读指令(被 volatile 修饰的变量在对此变量读取时)会加入读屏障。
2024-04-01 19:55:35
332
原创 JUC并发编程——wait / notify原理
Monitor 中有三个部分:Owner,EntrySet 和 WaitSet。Owner 是拥有锁的线程地址,EntrySet 是其他线程想要获取锁的列表,WaitSet 是拥有锁的线程一些条件未满足调用 wait() 方法,进入的WaitSet列表,并且释放锁。在 EntryList 中的线程状态是 BLOCKED,在 WaitSet 中的线程状态是 WAITING。都不占用 CPU 时间片。
2024-03-31 20:42:33
519
原创 JUC并发编程——对于synchronized关键字的理解
两个线程对初始值为 0 的静态变量一个做自增,一个做自减,各做 5000 次,最后输出的counter一定为0 吗?
2024-03-30 14:33:36
976
原创 JUC并发编程——常用方法
异常,但是查询t1的打断状态缺失,显示未打断,说明 sleep 时线程被 interrupt 后,清除了 interrupt 的状态。打断 sleep,wait,join 的线程,这几个方法都会让线程进入阻塞状态。注意 interrupt() 和 isInterrupted() 方法的区别。可以看到t1 sleep 一秒后已经被打断了,且抛出了。打断 sleep 的线程, 会清空打断状态。:等待线程运行结束,最多等待 n 毫秒。打断正常运行的线程,不会清除打断状态。未调用 join 方法。
2024-03-28 18:54:13
344
原创 JVM(六)——内存模型与高效并发
【java 内存模型】是 Java Memory Model(JMM)简单的说,JMM 定义了一套在多线程读写共享数据时(成员变量、数组)时,对数据的可见性、有序性、和原子性的规则和保障。
2024-03-27 22:26:16
1194
原创 JVM(五)——类加载阶段
在自定义类加载器时,使用不同的类加载器对象获取的类不是相同的。Class<?Class<?// 都是 classLoader1 对象// trueClass<?// 创建了 classLoader2// false。
2024-03-27 15:28:13
820
原创 JVM(四)——编译期的处理
如果匿名内部类中引用了外部的变量,那么在通过匿名内部类创建额外的类时,会把引用的变量当作本类的成员变量,且在原类中(使用了匿名内部类),向匿名内部类中传递的变量必须是 final 的。擦除的是字节码上的泛型信息,可以看到 LocalVariableTypeTable 仍然保留了方法参数泛型的信息。和转换的一些代码,主要是为了减轻程序员的负担。创建一个类后,如果没有构造器,编译器会自动为我们添加无参的构造器,且调用父类的无参构造方法。枚举类中的成员,实际上是 枚举类中的实例对象且个数是一定的。
2024-03-26 21:03:12
880
原创 JVM(二)——垃圾回收
在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一;当引用失效时,计数器值就减一;任何时刻计数器为零的对象就是不可能再被使用的。但是存在循环引用的问题。
2024-03-25 21:32:59
1205
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人