CompletableFuture 有更新! 2022-11-30 一、前言 Java 支持的多线程开启方式 根据 Oracle 官方出具的 Java 文档说明,创建线程的方式只有两种:继承 Thread 或者实现 Runnable 接口。但是这两种方法都存在一个缺陷,没有返回值,也就是说我们无法得知线程执行结果。虽然简单场景下已经满足,但是当我们需要返回值的时候怎么办呢?Java1.5 以后得 Callable 和 Future 接口就解决了这个问题,我们可以通过向线程池提交一个 Callable 来获取一个包含返回值的 Future 对象,从此,我们的程序逻辑就不再是同步顺序。 下面是 Java8 实战书籍的原文: 1Future接口在Java5中被引入,设计初衷是对将来某个时刻会产生的结果进行建模。它建模了一种异步运算,返回了一个执行结果的引用,当运算结束后,这个引用被返回给调用方。在Future中触发那些潜在耗时的操作完成,我们从最初的串行操作变成了并行,在异步的同时,我们还可以做其他事情来解决程序运行时间。 Future 接口的局限性 当我们得到包含结果的 Future 时,我们可以使用 get()方法等待线程完成并获取返回值,但是 Fut....
ParallelStream 并行流 有更新! 2022-11-25 一、什么是流 Stream 是 Java8 中新增加的一个特性,统称为流,它不是数据结构也不存放任何数据,其主要用于集合的逻辑处理。 二、Stream 和 Iterator 的区别 Iterator 作为迭代器,其按照一定的顺序迭代遍历集合中的每一个元素,并且对每个元素进行指定的操作。而 Stream 在此基础上还可以将这种操作并行化,利用多核处理器的优势快速处理集合(集合的数据会分成多个段,有多个线程处理)。 三、Stream 的使用 Stream 完全依赖于接口化编程方式,以下举例了解下 Stream 的使用。 1 List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8); 2 numbers.stream().forEach(System.out::print); 3 // 输出12345678 由以上的例子可以看出,Stream 的遍历方式和结果与 Iterator 没什么差别,这是因为 Stream 的默认遍历和迭代器是相同的,保证以往使用迭代器的地方可以方便的改写为 Stream。 Stream....
Redis Redisson 发布/订阅模式 实现 2022-11-24 一、Redis 的发布订阅模式 什么是发布订阅 任务队列:顾名思义,就是"传递消息的队列"。与任务队列进行交互的实体有两类,一类是生产者(producer),另一类则是消费者(consumer)。生产者将需要处理的任务放入任务队列中,而消费者则不断地从任务队列中读取任务信息并执行。 发布订阅模式 其实从 Pub/Sub 的机制来看,它更像是一个广播系统,多个订阅者(Subscribe)可以订阅多个频道(Channel),多个发布者(Publisher)可以往多个频道(Channel)中发布消息。 可以这么简单的理解 Subscribe:收音机,可以收到多个频道,并以队列方式显示; Publisher:电台,可以往不同的 FM 频道中发消息; Channel:不同频率的 FM 频道; 特点 发送者(发布者)不是计划发送消息给特定的接受者(订阅者),而是发布的消息分到不同的频道,不需要知道什么样的订阅者订阅; 订阅者对一个或多个频道感兴趣,只需接受感兴趣的消息,不需要知道什么样的发布者发布的; 业务场景 说一个目前已经遇到的场景,客户端通过 websocket 和服务器进行长连....