
java
文章平均质量分 89
Ascend1797
这个作者很懒,什么都没留下…
展开
-
什么是AQS
AQS(AbstractQueuedSynchronizer)是Java中一个抽象的同步框架,它提供了一些基本的同步工具(如独占锁、共享锁等)的实现,并且能够让开发者通过继承它来实现自定义的同步工具。AQS内部维护了一个FIFO的线程等待队列,通过CAS操作等机制和内置的休眠和唤醒的机制实现了线程的挂起和恢复。AQS的核心思想是将“状态”和“线程”分离开来,将“状态”保存在AQS内部的某个属性变量中,而将“线程”保存在AQS内部的一个FIFO的等待队列中。原创 2024-07-11 20:23:59 · 706 阅读 · 0 评论 -
JVM类加载机制
Java的双亲委派机制可以有效地确保类的安全和一致性,促进类加载器的合理组织和设计,使得Java应用程序具有更高的可靠性、安全性和可扩展性。原创 2024-07-10 15:46:31 · 895 阅读 · 1 评论 -
Spring Boot集成EasyExcel实现数据导出
在开发Web应用中,经常需要将数据导出为Excel文件。EasyExcel是一款功能强大的Java开发库,它提供了简单易用的API来帮助我们实现数据的导出功能,并支持一些高级特性,在EasyExcel的基础上,自定义实现如列下拉列表、自定义单元格样式、自适应列宽和行高、动态表头以及多个sheet页的数据导出。本篇博客将介绍如何使用Spring Boot集成EasyExcel库来实现这些高级数据导出功能。原创 2023-09-13 17:36:57 · 1427 阅读 · 2 评论 -
@Import详解及@Import注入对象的四种方式
@Import的使用方式有4种:直接导入类,导入配置类来导入Bean,导入 ImportSelector 的实现类,导入 ImportBeanDefinitionRegister 的实现类。从注释来看,@Import注解只可以标注在类上,可以结合 @Configuration注解、ImportSelector、ImportBeanDefinitionRegistrar一起使用,也可以导入普通的类。原创 2023-06-26 09:48:44 · 6349 阅读 · 0 评论 -
SpringBoot 集成 canal
Canal 是用 Java 开发的基于数据库增量日志解析,提供增量数据订阅&消费的中间件。目前,Canal 主要支持了 MySQL 的 Binlog 解析,解析完成后才利用 Canal Client 来处理获得的相关数据。原创 2023-06-14 10:43:37 · 2148 阅读 · 0 评论 -
IDEA快捷键大全及Eclipse快捷键大全
本篇包含了 IntelliJ IDEA 中常用的快捷键及Eclipse 中常用的快捷键。原创 2023-06-08 15:58:35 · 3064 阅读 · 0 评论 -
Java8 Stream详解及结束操作方法使用示例(三)
Stream 结束操作方法是指在处理完 Stream 流中的元素后,返回一个非 Stream 对象的操作,也称为终止操作。这些操作通常会触发 Stream 流元素的遍历计算,并将计算结果返回。原创 2023-06-07 20:18:03 · 2660 阅读 · 0 评论 -
Java8 Stream详解及创建流方法使用示例(二)
创建流指的是将一个集合或其他数据源转换为 Stream 流对象的过程。通常情况下,我们可以使用 Stream 类的静态方法来创建流对象,如 Stream.of()、Collections.stream() 等。这些方法将返回一个 Stream 流对象,该对象可用于对数据进行各种操作。下面是一些常用的创建流的方法原创 2023-06-07 20:02:47 · 859 阅读 · 0 评论 -
Java8 Stream详解及中间操作方法使用示例(一)
Stream 是 Java 8 中引入的一个新的概念,它代表着一种元素序列的表现形式。具体来说,它是对集合和数组等数据源的抽象,类似于 I/O 流,但它不会改变数据源本身。Stream 的出现使得我们可以更方便、更高效地对数据进行操作,它可以帮助我们轻松地实现过滤、映射、排序、统计等操作,同时还能够支持并行处理,大大提高了程序的效率。原创 2023-06-07 19:39:09 · 1480 阅读 · 0 评论 -
ConcurrentLinkedQueue详解
ConcurrentLinkedQueue是Java中的一个线程安全队列,它提供了基于链表的FIFO(先进先出)队列实现。用于高并发场景中的元素存储和获取,能够保证多线程环境下队列操作的顺序性和线程安全性。ConcurrentLinkedQueue一般不会使用锁来实现线程安全,而是采用了一些比较轻量级的算法,如CAS(比较-交换)算法等来保证线程安全。这大大减少了线程之间的等待和竞争,从而提高了系统的并发能力和性能。原创 2023-06-01 16:17:20 · 1789 阅读 · 0 评论 -
Java8 Collectors类详解(一)
Collectors类是用于对流进行收集和汇总的工具类。它提供了许多方法来对流进行分组、统计、转换、分区、连接、归约等操作,使得处理集合类数据变得更加方便。在使用Collectors类时,我们可以通过调用其中的方法来实现对流的不同处理方式。例如,将流中的元素收集到一个 List 中,可以使用toList()方法;按照指定条件进行分组,可以使用方法;统计流中的元素个数,可以使用counting()方法等等。此外,Collectors类还支持自定义收集器,即我们可以根据自己的需求来编写实现了。原创 2023-05-31 14:08:13 · 7276 阅读 · 4 评论 -
CompletableFuture获取执行结果的方法
使用 CompletableFuture 中获取执行结果的方法时应该避免阻塞主线程,因为它们都可能会导致线程阻塞,影响程序的整体性能和响应能力。因此,在实际使用中我们应该结合 CompletableFuture 的回调函数或者连续的异步操作等方法,来实现非阻塞的异步计算和结果处理。原创 2023-05-30 14:04:52 · 8821 阅读 · 0 评论 -
CompletableFuture详细介绍及方法使用示例(二)
对于 CompletableFuture 这个类,它是 Java 并发编程中的重要组件之一,它能够帮助我们更加方便和灵活地处理异步任务,提高程序的执行效率和吞吐量。首先,CompletableFuture 是一种可以用于异步计算的 Future,它提供了丰富的方法来处理异步任务的结果。与传统的 Future 不同,CompletableFuture 可以通过回调函数或者连续的异步操作来处理任务结果,而无需在等待任务完成时一直阻塞线程。这使得我们可以更加灵活地编写并发代码,避免线程阻塞和死锁等问题。原创 2023-05-30 11:19:07 · 756 阅读 · 0 评论 -
Java线程之间如何通信的,有哪些方式?
尽可能避免共享变量,因为共享变量容易引起线程安全问题。对共享变量的访问需要加锁,以保证同步访问。避免死锁问题的发生。使用锁时需要特别注意加锁和释放锁的顺序。使用条件变量时,应该确保线程在调用 await() 方法之前已经获取了锁。否则,在等待条件成立的过程中,其他线程可能会修改共享资源,导致程序出现错误。在使用信号量时,需要正确设置信号量的个数和调用 acquire() 和 release() 方法的顺序,否则可能会出现线程阻塞或信号量无法释放的情况。管道的使用需要注意线程之间的数据传输方式,以及缓冲区的原创 2023-05-29 17:37:32 · 6561 阅读 · 0 评论 -
Optional类详解及使用方法示例
Optional类是java8中引入的一个非常有用的类,它可以用来解决空指针异常带来的不便。这个类可以将对象包装为一个Optional对象,如果该对象为空,则可以使用一些默认值或者执行一些默认操作。Optional 是 Java 实现函数式编程的强劲一步,并且帮助在范式中实现。Java8的Optional类提供了丰富的 API 方法,这里按照其功能分类介绍。原创 2023-05-29 14:37:25 · 5737 阅读 · 2 评论 -
CompletableFuture详细介绍及方法使用示例(一)
CompletableFuture是Java 8中引入的一种实现异步编程模型的方式,它是Future的扩展,提供了更强大、更灵活的功能。CompletableFuture可以表示两个异步任务之间的顺序关系或并行关系,同时提供了一些方便的工具方法来组合这些关系。原创 2023-05-25 11:04:01 · 9267 阅读 · 0 评论 -
Java Stream对象并行处理方法parallel()
通常情况下,Stream API上的大多数操作都是顺序执行的,也就是说操作一个元素,然后再操作下一个元素。需要注意的是,并行计算不一定总是比串行计算更快,因为创建线程以及进行线程间通信的开销也是很大的。同时,在使用并行流时,需要确保Stream的操作是无状态或者线程安全的,否则可能会导致意外的结果。具体来说,Stream的parallel()方法可以将一个顺序流转换为一个并行流。使用并行流时,不需要手动设置线程数,因为Java会自动根据CPU核心数瓶颈以及程序的处理需求设置最优的线程数。原创 2023-05-24 13:49:51 · 8757 阅读 · 0 评论 -
JDK11相比JDK1.8有哪些新特性
Java 11 相比 Java 8 引入了许多新的语言特性和 API,例如HTTP API的改进,包括对HTTP/2和WebSocket的支持,ZGC(可伸缩低延迟垃圾收集器)的引入,提供更好的大内存处理能力。原创 2023-05-18 20:18:38 · 5936 阅读 · 0 评论