
并发编程
文章平均质量分 71
分享JAVA并发编程的理论和实战
伍六七AI编程
伍六七AI编程
展开
-
10 分钟学会使用 Java 多线程
有些情况,我们需要做到资源隔离,比如上面使用 进行 IO 操作,我们需要自定义线程池,那我们怎么定义呢?原创 2023-11-14 13:10:24 · 343 阅读 · 0 评论 -
提升微服务稳定性与性能:深入剖析Netflix Hystrix框架
com.netflix.hystrix.HystrixCommand 是 Netflix Hystrix 框架中的核心类,用于实现服务的容错和熔断功能。它通过封装远程服务调用,提供容错处理、熔断机制和监控统计等功能,适用于微服务架构和高并发场景。通过使用 HystrixCommand,可以提高系统的可用性、稳定性和性能。原创 2023-10-16 12:38:28 · 619 阅读 · 0 评论 -
提升微服务稳定性与性能:深入剖析Netflix Hystrix框架
com.netflix.hystrix.HystrixCommand 是 Netflix Hystrix 框架中的核心类,用于实现服务的容错和熔断功能。它通过封装远程服务调用,提供容错处理、熔断机制和监控统计等功能,适用于微服务架构和高并发场景。通过使用 HystrixCommand,可以提高系统的可用性、稳定性和性能。原创 2023-10-16 11:45:00 · 446 阅读 · 1 评论 -
Reactor 第十二篇 WebFlux集成PostgreSQL
本文介绍了如何使用 Reactor 和 WebFlux 集成 PostgreSQL,实现响应式的数据库访问。通过使用 Spring Data R2DBC 和响应式的流处理,我们可以方便地进行数据库的增删改查操作。这种方式可以提升系统的性能和扩展性,特别适用于高并发和大数据量的场景。希望本文对您在使用 Reactor 和 WebFlux 集成 PostgreSQL 方面有所帮助。无论是使用 PostgreSQL 还是其他数据库,使用响应式方式来进行数据库访问都能带来很多好处。原创 2023-09-15 15:17:54 · 538 阅读 · 0 评论 -
Reactor 第十篇 定制一个生产的WebClient
刚开始尝试使用 Spring WebFlux 的时候,很多人都会使用 Mono.fromFuture() 将异步请求转成 Mono 对象,或者 Mono.fromSupplier() 将请求转成 MOno 对象,这两种方式在响应式编程中都是不建议的,都会阻塞当前线程。因此,可以使用 Mono.fromSupplier() 方法将一个纯计算型的操作转换为 Mono 对象,而将一个异步返回结果的操作转换为 Mono 对象时,可以使用 Mono.fromFuture() 方法。原创 2023-08-21 19:22:52 · 1058 阅读 · 0 评论 -
【Reactor第八篇】WebFlux 服务编排
WebFlux 服务编排是指使用 WebFlux 框架来编排多个的执行顺序和数据流动,从而构建出一个完整的、基于事件驱动的响应式应用程序。WebFlux服务编排的优势如下:高性能:WebFlux基于响应式编程模型,可以使用少量的线程处理大量的请求,从而提高系统的并发能力和吞吐量。异步处理:WebFlux可以异步处理请求和响应,避免线程的阻塞和等待,提高系统的并发能力和性能。高可靠性:WebFlux基于事件驱动的编程模型,可以更好地处理错误和异常,从而提高系统的可靠性和稳定性。原创 2023-04-25 17:36:53 · 623 阅读 · 0 评论 -
google Guava包RateLimiter使用最佳实践
如果您使用的是非阻塞的逻辑,并且需要根据RateLimiter的许可证可用性做出决策,则可以使用tryAcquire()方法来尝试获取许可证。Resilience4j 是一款支持多种限流和熔断策略的开源库,支持QPS、线程池、超时、重试等熔断和限流策略,可以帮助开发人员轻松实现应用程序的可靠性和弹性。在创建RateLimiter对象时,建议使用静态工厂方法来创建,因为它提供了更清晰的API,并且允许您使用不同的参数值来创建RateLimiter对象。该方法用于获取指定数量的许可证,并返回等待的时间。原创 2023-04-14 16:18:10 · 818 阅读 · 0 评论 -
借助Redis Bitmap实现简单的布隆过滤器
要初始化一个布隆过滤器的话,需要两个参数:预估的元素数量,以及可接受的最大误差(即假阳性率)。Bitmap在Redis中并不是一个单独的数据类型,而是由字符串类型(Redis内部称Simple Dynamic String,SDS)之上定义的与比特相关的操作实现的,此时SDS就被当做位数组了。另外,setbit指令不会重置对应Key的过期时间戳。Redis提供的Bitmap正好能够作为布隆过滤器所需要的位数组的基础,本文先简要介绍Bitmap,然后给出基于它的布隆过滤器实现。转载 2023-03-08 15:20:22 · 809 阅读 · 0 评论 -
Reactor响应式编程 之 简介
在底层,它使用 Project Reactor,但是,你也可以将它与 RxJava (或任何其他的响应流实现)一起使用,它甚至可以与 Kotlin 协程一起工作。换句话说, Reactor 是一个基础响应式包,Spring WebFlux 是一个框架,这个框架默认使用 Reactor,但是可以使用 RxJava,也可以使用 Kotlin 等其他响应式包。Spring 正在使用 project-reactor,因此它得到了更多的支持、广告和更大的社区,所以用它的人比较多。标准的阻塞代码不再足以满足这些要求。原创 2022-10-24 18:42:37 · 2378 阅读 · 0 评论 -
Reactor 之 手把手教你 Spring Boot 整合 Reactor
手把手教你使用 SpringBoot 整合 Reactor,编写响应式代码。原创 2022-09-06 20:38:18 · 1510 阅读 · 0 评论 -
java多线程学习之九—并发编程常见面试题以及答案
1、现在有 T1、T2、T3 三个线程,你怎样保证 T2 在 T1 执行完后执行,T3 在 T2 执行完后执行?考察 Thread.join,还有其他concurrent包下工具类的了解。方法一:可以使用 join 方法实现等待;方法二:可以使用 CompletableFuture 的 thenCombine 方法public class TestOrder { public static void main(String[] args) { Thread thread1原创 2021-03-14 20:53:06 · 396 阅读 · 1 评论 -
java多线程学习之八—JDK提供的线程同步的四个工具类
同步工具类可以是任何一个对象。阻塞队列可以用作同步工具类。生产者现场往队列中存入任务,消费者线程从阻塞队列中获取任务。可以在某种程度上对生产者线程和消费者线程进行解偶。存入任务和获取任务速率不一致的时候,不会导致效率下降。其他的同步工具类包括:信号量(Semaphore)、栅栏(Barrier、CyclicBarrier)、FutureTask以及闭锁(Latch、CountDownLatch)。信号量 SemaphoreSemaphore 可以用来控制某些访问资源的操作数量,可以用作限流器,可以原创 2021-03-05 22:46:18 · 554 阅读 · 0 评论 -
java多线程学习之七—如何优雅的停止线程(池)
文中内容整理自《Java并发编程实战》方法一:使用中断标志使用 cancelled 标志,当标志状态为true的时候,停止线程。示例:public class Test0701CancelThread implements Runnable { public static void main(String[] args) { Test0701CancelThread cancelThread = new Test0701CancelThread(); try原创 2021-02-27 10:36:57 · 989 阅读 · 2 评论 -
java多线程学习之四—CompletableFuture源码分析以及例子实证
CompletableFuture介绍默认情况下 CompletableFuture 会使用公共的 ForkJoinPool 线程池,这个线程池默认创建的线程数是 CPU 的核数(也可以通过 JVM option:-Djava.util.concurrent.ForkJoinPool.common.parallelism 来设置 ForkJoinPool 线程池的线程数)。但是也不一定就使用ForkJoinPool,要看(cpu的核数-1)是否大于1,如果大于1,使用过 ForkJoinPool,否原创 2021-01-08 10:41:42 · 588 阅读 · 0 评论 -
JAVA面试题之七—线程池的工作原理和7个参数
线程池的工作原理和7个参数(京东物流、美团充电宝一面、中信银行一面、美团外卖一面、58用户平台一面、轻松集团)7个参数corePoolSize:线程池核心线程数量maximumPoolSize:线程池最大线程数量keepAliverTime:当活跃线程数大于核心线程数时,空闲的多余线程最大存活时间unit:存活时间的单位workQueue:存放任务的队列threadFactory:创建线程的工厂handler:超出线程范围和队列容量的任务的处理程序每个值为什么这么设置?工作原理例子原创 2020-10-02 09:01:36 · 807 阅读 · 0 评论 -
java多线程学习之二——多线程的优势和风险
优势:1、 提高系统的吞吐率。多线程编程使得一个进程中可以有多个并发的操作。例如:一个线程因为I/O操作而处于等待时,其他线程仍然可以执行其操作。2、 提高响应性。使用多线程编程的情况下,对于GUI软件(桌面应用程序)而言,一个慢的操作并不会导致软件的界面出现被“冻住”的现象而无法响应其他用户的其他操作。3、 充分利用多核CPU资源。避免资源浪费。4、 最小化对系统资源的使原创 2017-05-16 12:18:53 · 783 阅读 · 0 评论 -
java多线程学习之一——线程的状态、上下文切换和线程监控
多线程线程的状态1. NEW(图中初始状态):一个刚创建而未启动的线程处于该状态。由于一个线程实例只能被启动一次,因此一个线程只可能有一次处于该状态。2. 可运行(RUNNABLE):表示处于改状态的线程可以被JVM的线程调度器(scheduler)进行调度而使之处于运行中(RUNNING)状态。阻塞状态(BLOCKED):一个线程发起一个阻塞式I/O操作后,或者试图去获得一个原创 2017-05-15 12:17:50 · 2248 阅读 · 0 评论 -
java多线程学习之五—JAVA提交异步任务的三种方式
方法一:CompletableFutureCompletableFuture<List<CmsContentExtDO>> userListFuture = CompletableFuture.supplyAsync(()-> userMapper.selectByIds(ids));方法二:注解Async@Asynchttps://www.cnblogs.com/jpfss/p/10273129.html方法三:线程池创建全局线原创 2021-01-19 15:29:29 · 1067 阅读 · 2 评论 -
java多线程学习之六—JAVA获取线程执行结果的几种方式
获取线程执行结果的几种方式1、Callable 线程public class FetchAdTask implements Callable<Ad> { @Override public Ad call() throws Exception { System.out.println("fetch task"); sleep(1000L); return null; }}2、使用Future,包括 FutureTa原创 2021-01-20 23:18:39 · 792 阅读 · 0 评论