线程
线程
CrazySnail_x
这个作者很懒,什么都没留下…
展开
-
Java8 parallelStream实战
项目环境:JDK12springboot:2.1.6.RELEASEspringcloud:Greenwich.RELEASE业务场景系统需要对接RFID,扫描枪扫描商品得到的EPCCode经过前端传到后端,后端API需要先将EPC通过算法转成EANCode,再用EANcode请求一个API,得到itemcode。由于商品可能有多个,且最多有16个,如果用串行的话,由于EPC转EAN的算法很复杂,而且从EAN转itemcode还需要请求外部的API,效率会很低,所以并行是必须的。原创 2020-05-29 16:18:20 · 516 阅读 · 0 评论 -
Java中Volatile关键字详解
一、基本概念先补充一下概念:Java 内存模型中的可见性、原子性和有序性。可见性: 可见性是一种复杂的属性,因为可见性中的错误总是会违背我们的直觉。通常,我们无法确保执行读操作的线程能适时地看到其他线程写入的值,有时甚至是根本不可能的事情。为了确保多个线程之间对内存写入操作的可见性,必须使用同步机制。 可见性,是指线程之间的可见性,一个线程修改的状态对另一个线程是可见的。也就是...转载 2019-05-08 11:41:44 · 116 阅读 · 0 评论 -
线程池的拒绝策略
在没有分析线程池原理之前先来分析下为什么有任务拒绝的情况发生。这里先假设一个前提:线程池有一个任务队列,用于缓存所有待处理的任务,正在处理的任务将从任务队列中移除。因此在任务队列长度有限的情况下就会出现新任务的拒绝处理问题,需要有一种策略来处理应该加入任务队列却因为队列已满无法加入的情况。另外在线程池关闭的时候也需要对任务加入队列操作进行额外的协调处理。RejectedExecutionH...原创 2019-12-16 16:44:34 · 388 阅读 · 0 评论 -
线程的几种状态。
谈到线程池就会想到池化技术,其中最核心的思想就是把宝贵的资源放到一个池子中;每次使用都从里面获取,用完之后又放回池子供其他人使用,有点吃大锅饭的意思。那么线程池有哪几种状态呢?在这里做一下总结:1. 新建( new ):新创建了一个线程对象。2. 可运行( runnable ):线程对象创建后,其他线程(比如 main 线程)调用了该对象 的 start()方法。该状态的...原创 2019-12-16 15:23:26 · 189 阅读 · 0 评论 -
@Async注解的使用 及@Async 注解失效问题的分析与解决方案
在开发过程中,我们会遇到很多使用线程池的业务场景,例如异步短信通知、异步记录操作日志。大多数使用线程池的场景,就是会将一些可以进行异步操作的业务放在线程池中去完成。例如在生成订单的时候给用户发送短信,生成订单的结果不应该被发送短信的成功与否所左右,也就是说生成订单这个主操作是不依赖于发送短信这个操作,所以我们就可以把发送短信这个操作置为异步操作。那么本文就是来看看Spring中提供的...原创 2019-12-09 22:51:21 · 7396 阅读 · 2 评论 -
深入理解java线程池—ThreadPoolExecutor
几句闲扯:首先,我想说java的线程池真的是很绕,以前一直都感觉新建几个线程一直不退出到底是怎么实现的,也就有了后来学习ThreadPoolExecutor源码。学习源码的过程中,最恶心的其实就是几种状态的转换了,这也是ThreadPoolExecutor的核心。花了将近小一周才大致的弄明白ThreadPoolExecutor的机制,遂记录下来。线程池有多重要线程是一个程序员一定会涉及到的...原创 2019-05-08 14:33:09 · 248 阅读 · 0 评论