03 2023 档案
摘要:1. 简介 相比Future(【并发编程】Java5 - Future,基本使用),Guava提供的ListenableFuture支持不阻塞主线程进行任务执行完成后的业务处理。 使用Future的实现类FutureTask想要实现一旦获取到结果立即执行后续的业务,就需要阻塞主线程等待结果或者使用其
阅读全文
摘要:1. 简介 CompletableFuture是Java8的新特性,在Future基础上,增加流式计算、函数式编程、完成通知、自定义异常、多个Future组合处理等能力,使得在多线程协同处理时更加顺利。 2. 相关博客 【并发编程】Java5 - Future,基本使用 【并发编程】Java5 -
阅读全文
摘要:1. 简介 相比Future(【并发编程】Java5 - Future,基本使用),CompletionService除了支持并行执行任务并获取结果外,还支持优先获取到最快执行的任务结果,但CompletionService要求并行执行的任务是无序的。 使用Future的实现类FutureTask获
阅读全文
摘要:1. 简介 在使用多线程开发中,不论是继承Thread类还是实现Runnable接口方式,都无法非常方便的获取异步任务执行的结果。在JDK1.5提供了和Runnable类似但多了返回值的Callable接口,通过Future接口实现类和Callable接口方式,可以非常灵活的进行多线程操作,例如:获
阅读全文
摘要:1. 继承Thread类 import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; /** * 继承Thread类创建多线程单元测试 * * @author CL */ @Slf4j public class Threa
阅读全文
摘要:1. 自定义线程池 1.1 示例代码 /** * 自定义线程池 * <p> * 优点:可以自定义参数 * </p> */ @Test public void testNewThreadPoolExecutor() { ThreadPoolExecutor executor = new ThreadP
阅读全文
摘要:1. 简介 在日常开发中一些关键的业务服务,期望在高并发状态下可以正常工作,或在异常情况时可以记录当时的性能信息,所以就需要进行监控。常见的监控例如:Prometheus可以实现这个需求,如果需要更加简单方便的自主监控能力,可以引入本博客中的方案。 2. 相关博客 Promtail+Loki+Gra
阅读全文
摘要:1. 简介 在日常的WEB开发中都会使用数据库存储信息。大多数情况我们只是使用了数据库,而无法感知业务对数据库的压力,从而无法有目的的提升性能。在使用数据库时,都会选用常见的C3P0、DBCP、Hikari、Druid连接池,虽然SpringBoot官方强调Hikari性能更好,但我更倾向于功能更加
阅读全文
摘要:1. 使用流读取文件 public static void stream() { String fileName = "D:\\test.txt"; final String CHARSET_NAME = "UTF-8"; List<String> content = new ArrayList<>
阅读全文