
并发编程
文章平均质量分 80
Ascend1797
这个作者很懒,什么都没留下…
展开
-
ConcurrentLinkedQueue详解
ConcurrentLinkedQueue是Java中的一个线程安全队列,它提供了基于链表的FIFO(先进先出)队列实现。用于高并发场景中的元素存储和获取,能够保证多线程环境下队列操作的顺序性和线程安全性。ConcurrentLinkedQueue一般不会使用锁来实现线程安全,而是采用了一些比较轻量级的算法,如CAS(比较-交换)算法等来保证线程安全。这大大减少了线程之间的等待和竞争,从而提高了系统的并发能力和性能。原创 2023-06-01 16:17:20 · 1789 阅读 · 0 评论 -
CompletableFuture获取执行结果的方法
使用 CompletableFuture 中获取执行结果的方法时应该避免阻塞主线程,因为它们都可能会导致线程阻塞,影响程序的整体性能和响应能力。因此,在实际使用中我们应该结合 CompletableFuture 的回调函数或者连续的异步操作等方法,来实现非阻塞的异步计算和结果处理。原创 2023-05-30 14:04:52 · 8820 阅读 · 0 评论 -
CompletableFuture详细介绍及方法使用示例(二)
对于 CompletableFuture 这个类,它是 Java 并发编程中的重要组件之一,它能够帮助我们更加方便和灵活地处理异步任务,提高程序的执行效率和吞吐量。首先,CompletableFuture 是一种可以用于异步计算的 Future,它提供了丰富的方法来处理异步任务的结果。与传统的 Future 不同,CompletableFuture 可以通过回调函数或者连续的异步操作来处理任务结果,而无需在等待任务完成时一直阻塞线程。这使得我们可以更加灵活地编写并发代码,避免线程阻塞和死锁等问题。原创 2023-05-30 11:19:07 · 756 阅读 · 0 评论 -
CompletableFuture详细介绍及方法使用示例(一)
CompletableFuture是Java 8中引入的一种实现异步编程模型的方式,它是Future的扩展,提供了更强大、更灵活的功能。CompletableFuture可以表示两个异步任务之间的顺序关系或并行关系,同时提供了一些方便的工具方法来组合这些关系。原创 2023-05-25 11:04:01 · 9267 阅读 · 0 评论 -
深入理解CAS
CAS(Compare and Swap,比较并交换)是一种乐观锁技术,用于实现多线程环境下的原子操作。CAS操作包括三个参数:内存地址V、期望值A和新值B。当且仅当V的值等于A时,才将V的值设置为B,否则什么也不做。即针对一个变量,首 先比较它的内存值与某个期望值是否相同,如果相同,就给它赋一个新值。原创 2023-04-19 16:01:11 · 141 阅读 · 0 评论 -
Java线程池execute()和submit()方法的区别
execute()更加简单直接,适用于不需要关心任务的返回值以及异常处理的情况,而submit()则更加灵活,适用于需要获取任务的执行状态、结果,并进行相应的处理的情况。原创 2023-04-19 11:02:43 · 1394 阅读 · 0 评论 -
CompletableFuture 原理分析
本章节我们主要来聊一聊CompletableFuture的回调功能以及异步工作原理的实现。原创 2023-03-27 13:42:23 · 577 阅读 · 0 评论 -
@Async详解(二)
我们知道当使用@Async不指定线程池时,Spring会默认使用SimpleAsyncTaskExecutor线程池,那么SimpleAsyncTaskExecutor有什么缺点呢?本篇我们通过源码分析SimpleAsyncTaskExecutor为什么不建议使用。原创 2023-03-23 17:55:37 · 3855 阅读 · 1 评论 -
Spring异步注解@Async
通过AsyncExecutionAspectSupport源码,我们可以知道线程池会首先通过用户自己配置的为准,找不到就使用默认的线程池,Spring会优先搜索TaskExecutor类型的bean或者名为taskExecutor的Executor类型的bean,如果都不存在的话,会使用SimpleAsyncTaskExecutor(不推荐使用)执行器。所以,我们可以自定义线程池,然后注入spring中,将bean的名字放到@Async注解的value值即可。原创 2023-03-23 15:16:12 · 911 阅读 · 0 评论 -
ThreadPoolExecutor原理解析(二)
addWorker方法主要作用是检查是否可以根据当前池状态和给定的界限(核心或最大值)添加新的worker。如果是这样,将相应地调整worker计数,如果可能的话,将创建并启动一个新的worker,并将firstTask作为它的第一个任务运行。如果线程池已停止或符合关闭条件,则此方法返回false。如果线程工厂在被要求创建线程时失败,它也会返回false。如果线程创建失败,要么是由于线程工厂返回null,要么是由于异常(通常是thread .start()中的OutOfMemoryError)。原创 2023-02-28 16:35:59 · 145 阅读 · 0 评论 -
ThreadPoolExecutor原理解析(一)
Java中的线程池核心实现类是ThreadPoolExecutor,本次基于JDK 1.8的源码来分析Java线程池的核心设计与实现。原创 2023-02-23 19:12:16 · 143 阅读 · 0 评论 -
为什么不推荐使用Executors线程池
Executors类提供了一些创建线程池的静态方法。但是阿里巴巴开发手册强制不允许使用Executors来创建线程池,下面根据源码分析为什么阿里巴巴开发手册不允许使用Executors类创建线程池。原创 2023-02-21 15:52:27 · 458 阅读 · 0 评论