![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 85
jiang_anwei
这个作者很懒,什么都没留下…
展开
-
并行流的使用偶现ConcurrentModificationException 异常
问题描述今天排查线上偶现的问题,查日志是并发修改集合的异常:问题代码:Map<String, Object> context = ContextUtil.getAll();req.getLines().parallelStream().forEach(lineNo -> { ContextUtil.putAll(context); baseWave.occupyLine(warehouseCode, lineNo, req.getPlanDate());});原创 2021-01-14 14:58:11 · 1058 阅读 · 8 评论 -
对java8 StreamAPI的扩展
java8的流(Stream API)已经提供了很强大的api接口了,满足日常开发的绝大部分需要,但是还是有些欠缺比如 java9才增加的两个api takeWhile dropWhiletakeWhile() 方法使用一个断言作为参数,返回给定 Stream 的子集直到断言语句第一次返回 false。**dropWhile()**与takeWhile相反,使用一个断言作为参数,直到断言语句第一次返回 true 才返回给定 Stream 的子集。还有不爽的地方是同一个流只能执行一次流水线操作,完成后这原创 2020-07-09 15:33:34 · 495 阅读 · 0 评论 -
java8 Stream流水线实现分析
java8的Stream流水线,用起来很爽,但是他是怎么做到的呢。Stream流水线记录用户的每一步操作步骤(map,filter等),当用户调用结束操作(Collect,reduce 等)时将用户之前记录的操作一并执行调。这里就有几个问题要解决了如何记录用户操作如何将用户操作串联起来如何触发整个任务获取结果记录串联用户操作首先查看类图查看源码我们可以看到 list.stream().map(x->x+“123”).filter(x->x.startsWith(“test”)原创 2020-07-03 16:54:54 · 2106 阅读 · 0 评论 -
java IO模型
阻塞 与 非阻塞阻塞请求收到后,请求被一直阻塞,直到条件满足(可读,可写等)非阻塞请求收到后,立即返回一个标志信息,而不会一直阻塞等待。一个通过 Selector选择器遍历channel获取满足条件的channel来处理。同步 与 异步同步每个请求必须逐个地被处理,一个请求的处理会导致整个流程的暂时等待,这些事件无法并发地执行。用户线程发起I/O请求后需要等待或者轮询内核I/O操作完成后才能继续执行。nio是业务线程在io操作准备好得到通知,接着由该线程进行io操作,但是io本身还是同步的。原创 2020-06-17 16:08:58 · 154 阅读 · 0 评论 -
在踩坑中深入理解ThreadLocal
简介ThreadLocal 是一创建线程局部变量的类,就是说这个类创建的变量值能被当前线程访问,其他线程无法访问和修改。特点Global:在当前线程中,任何位置能获取到ThreadLocal的值Local:该线程的ThreadLocal只能被该线程访问,一般情况下其他线程访问不到(使用InheritableThreadLocal可以将某个线程的ThreadLocal值在其子线程创建时传递过...原创 2020-04-01 13:45:53 · 526 阅读 · 0 评论 -
java中枚举的定义及使用
枚举的定义当类的对象时有限且固定的,如季节类,它只有春夏秋冬4个对象这种实例有限且固定的类,在 Java 中被称为枚举类;定义:public enum ElementType { NODE, EDGE}这是java中的语法糖实际上会被编译成这样:public class ElementType extends Enum<ElementType>{}所有的枚举...原创 2020-03-02 14:38:37 · 921 阅读 · 0 评论 -
异步编排CompletableFuture
特点在传统future上,只能异步调用get方法,获取计算结果,能做的事情十分有限,比如想要异步执行完任务之后再去执行另一个任务。传统future做这个事情就显得力不从心了。这就是CompletebleFuture解决的问题。CompletebleFuture提供了丰富的接口用来添加异步任务的回调函数。简单使用创建异步任务创建异步任务主要有以下三种CompletableFuture.su...原创 2019-11-26 17:27:26 · 1469 阅读 · 0 评论 -
Java程序优雅的退出
背景最近收到一个新需求,需要充kafka队列中那消息解析写到es中。要求不能漏写数据,或者重复写数据。‘##问题如果程序中途需要手动停止,就需要把已经从kafka中拿到的数据,写进了es 才能停止程序。否则就会漏写数据或者重复写入数据解决钩子函数ShutdownHook只是一个已初始化但为启动的线程。当JVM开始执行关闭序列时,它才开始已某种随机程序注册和并行执行shutdown ho...原创 2019-10-11 17:19:15 · 489 阅读 · 0 评论