
多线程
文章平均质量分 96
russle
Java开发工程师
**注意事项**:本博客所有代码是为了介绍相关内容而编写或者引用的,示例代码并非可直接用于生产的代码。仅供参看而已。
展开
-
ForkJoinPool 简介
最近刚好用到了ForkJoinPool, 就再简要回顾复习一下ForkJoinPool。 Java7 提供了ForkJoinPool来支持将一个任务拆分成多个“小任务”并行计算,再把多个“小任务”的结果合并成总的计算结果。ForkJoinPool是ExecutorService的实现类,因此是一种特殊的线程池。 使用方法:创建了ForkJoinPool实例之后,就可以调用ForkJoinP...原创 2018-06-23 17:33:15 · 1528 阅读 · 0 评论 -
Fork/Join 与 ExecutorService比较
上一遍简单介绍了Fork/Join, 很多人自然会产生疑问,Fork/Join与ExecutorService有什么区别,应该选择用哪个?本文简要比较这两者。先给出官方介绍。oracle关于ForkJoin的官方教程在https://docs.oracle.com/javase/tutorial/essential/concurrency/forkjoin.html差异: Fork/Jo...原创 2018-06-23 22:40:56 · 3983 阅读 · 1 评论 -
Spring Boot 中使用@KafkaListener并发批量接收消息
kakfa是 我们在项目开发中经常使用的消息中间件。由于它的写性能非常高,因此,经常会碰到Kafka消息队列拥堵的情况。碰到这种情况时,有不能直接清理整改消息队列,因为还有别的服务正在使用该队列。因此只能额外启动一个相同名称的consumer-group来加快消息消费(经测试,如果该topic只有一个分区,实际上再启动一个新的消费者作用不到)。具体代码在这里,欢迎加星号,fork。官方文档......原创 2018-07-28 10:53:37 · 139817 阅读 · 33 评论 -
具有优先级的线程池
问题由来:多线程接收kafka的消息,有时消息几乎同时达到,先简单处理后提交给线程池再次处理,结果出现当先到达的消息msgA和后到达的消息msgB到达时间相差很小时,例如10毫秒,几乎同时提交到线程池,因为提交的线程池的时间相差更小有时几乎是完全相同的时间,导致偶然消息处理乱序,消息msgB被先处理了。解决思路:所有提交给线程池的Runnable带有优先级,虽然几乎同时提交到线程池,但是线程...原创 2018-10-20 23:31:20 · 6454 阅读 · 0 评论 -
ThreadPoolExecutor之FixedThreadPool详解
项目中大家基本都使用过线程池,节省线程创建和销毁的成本。Java JDK提供了几种线程池,那么如何选择合适的线程池?这就需要对每一种线程池有较详细的了解,然后根据实际业务类型,选择对应的线程池。 本文主要介绍FixedThreadPool。定义 /** * Creates a thread pool that reuses a fixed number of threads ...原创 2019-07-13 12:16:22 · 23204 阅读 · 2 评论 -
volatile与synchronized区别
招人时需要准备一些面试问题,有些内容虽然日常在用,但是没有系统化理解,面试时也很难评判对方回答的是否准确。因此,重新梳理了volatile与synchronized。volatilevolatile 是最轻量级的同步机制。Java内存模型对volatile专门定义了一些特殊访问规则。1, 线程可见性, 当一个线程修改了被volatile修饰的变量后,无论是否加锁,其他线程都可以立即看到最新的...原创 2019-08-03 11:13:24 · 977 阅读 · 0 评论