并发编程之美
文章平均质量分 55
友谊之路
事以密成,语以泄败
谋事未定,潜龙勿用
展开
-
线程池如何关闭
可以通过调用线程池的shutdown或shutdownNow方法来关闭线程池。原创 2024-05-07 11:39:13 · 225 阅读 · 0 评论 -
不同多线程场景下CompletionService 和 CompletableFuture 的使用
内部通过阻塞队列+FutureTask,实现了任务先完成可优先获取到,即结果按照完成先后顺序排序,内部有一个先进先出的阻塞队列,用于保存已经执行完成的Future,通过调用它的take方法或poll方法可以获取到一个已经执行完成的Future,进而通过调用Future接口实现类的get方法获取最终的结果。CompletableFuture实现了Future接口,并在此基础上进行了丰富地扩展,完美地弥补了Future上述的种种问题。使用系统默认的线程池,而是用的自己定义好并Autowired注入的线程池。原创 2024-04-22 16:58:51 · 340 阅读 · 0 评论 -
ThreadLocal原理及实例
【代码】【无标题】原创 2024-02-27 18:16:40 · 402 阅读 · 0 评论 -
CompletableFuture的thenCombine结果组合用法实例
thenCombine 用法,是将任务用多线程分组执行再组合。在项目实战中应用场景还是比较多的。项目实例写得还不够优雅,还有优化空间。原创 2024-01-17 18:33:46 · 503 阅读 · 0 评论 -
CountDownLatch的骚操作
以田径运动跑步为例,起跑前所有运动员等待裁判发枪声为准开始比赛、终点处计时裁判则需要等待所有运动员到达终点中宣布本轮次比赛结束,典型的多个线程等待一个线程、一个线程等待多个线程的场景,java.util.concurent包下的CountDownLatch就非常适合实现这种场景。4、CountDownLatch调用countDown()方法计数减一,调用await()方法只进行阻塞,对计数没任何影响,CyclicBarrer调用await()方法计数加1,若加1后的值不等于构造方法的值,则线程阻塞。原创 2023-10-11 14:15:23 · 50 阅读 · 0 评论 -
AQS之共享锁Semaphorer&CountDownLatch
Semaphore,俗称信号量,它也是基于AbstractQueuedSynchronizer实现的。例如: 大小为n的信号量可以实现限流的功能,它可以实现只能有n个线程同时获取信号量。CountDownLatch(闭锁)是一个同步协助类,允许一个或多个线程等待,直到其他线程完成操作集。CountDownLatch使用给定的计数值(count)初始化。原创 2023-12-24 23:45:51 · 204 阅读 · 0 评论 -
AQS之ReentrantReadWriteLock
ReentrantReadWriteLock适合读多写少的场景。是可重入的读写锁实现类。其中, 写锁是独占的,读锁是共享的。支持锁降级(持有写锁、获取读锁,最后释放写锁的过程)锁降级可以帮助我们拿到当前线程修改后的结果而不被其他线程所破坏,防止更新丢失。可以保证数据的可见性,如果当前线程不获取读锁而是直接释放写锁,假设此刻另一个线程(记作线程T)获取了写锁并修改了数据,那么当前线程无法感知线程T的数据更新。原创 2023-12-28 01:14:26 · 434 阅读 · 1 评论