import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; /** * 线程池测试类 */ ...
分类:
编程语言 时间:
2020-02-22 00:23:32
阅读次数:
68
前言 我们都知道 web 服务的工作大多是接受 http 请求,并返回处理后的结果。服务器接受的每一个请求又可以看是一个任务。一般而言这些请求任务会根据请求的先后有序处理,如果请求任务的处理比较耗时,往往就需要排队了。而同时不同的任务直接可能会存在一些优先级的变化,这时候就需要引入任务队列并进行管理 ...
分类:
编程语言 时间:
2020-02-21 11:24:28
阅读次数:
125
多线程: 线程池的创建: 一、使用ThreadPoolExecutor类 二、使用Executors 注:两种本质一样,都是通过ThreadPoolExecutor类的方式。 ThreadPoolExecutor方式 jdk源码: public ThreadPoolExecutor(int core ...
分类:
编程语言 时间:
2020-02-21 11:21:53
阅读次数:
108
设:我们有一个coreSize=10,maxSize=20,keepAliveTime=60s,queue=40 1、池初始化时里面没有任何线程。 2、当有一个任务提交到池就创建第一个线程。 3、若继续提交任务,有空闲线程就调拨空闲线程来处理任务?若没有线程空闲则再新建一个线程来处理,如此直到cor ...
分类:
编程语言 时间:
2020-02-20 20:09:05
阅读次数:
67
在前两个版本中,每次发起请求一次就新建一个netty的channel连接,如果在高并发情况下就会造成资源的浪费,这时实现 异步请求 就十分重要,当有多个请求线程时,需要设计一个 线程池 来进行管理。除此之外,当前方法过于依赖注册中心,在高并发情况下对注册中心造成了压力;另外如果注册中心出现宕机等情况 ...
分类:
其他好文 时间:
2020-02-19 23:44:01
阅读次数:
58
问题:我们看线上业务日志 和 查看jstack文件时 线程的名字经常的序号导致很难区分是哪一个线程,这个线程都在干什么 比如举例1: 下面这个业务log日志,根据线程名字不知道这是哪个线程类 如果是线程池的话,看到所有的线程都是以 pool- 开头的,那是因为人家就是写死的。如果要修改线程名字,那么 ...
分类:
编程语言 时间:
2020-02-19 19:13:28
阅读次数:
109
实例说明: 使用BIO模型编写一个服务器端,监听6000端口,当有客户端连接时,就启动一个线程与之通讯。 要求使用线程池机制改善,可以连接多个客户端. 服务器端可以接收客户端发送的数据(telnet 方式)。 import java.io.InputStream; import java.net.S ...
分类:
Web程序 时间:
2020-02-19 17:22:40
阅读次数:
94
pipeline 添加 handler 的时候,如果没有指定线程池,则使用 channel 的 IO 线程池,即 NioEventLoop。 所以,NioEventLoop 的作用是,轮询 SocketChannel 的网络事件,同时也可以处理 handler 中的代码。 public interf ...
分类:
编程语言 时间:
2020-02-18 18:04:46
阅读次数:
122
随着交易量逐步上升,业务越来越复杂,在设计整个帐务处理中考虑最终一致性的方案。 整个方案大概流程可以分为: 在业务完成后同步记录资金变动流水 如果需要里面处理的账务,则同步发出账务处理的异步消息 通过定时任务每分钟拉去需要记账的流水记录 启动线程池对每笔流水记录进行帐务更新 在数据更新很大的情况下, ...
分类:
其他好文 时间:
2020-02-17 19:59:37
阅读次数:
75
线程共包括以下 5 种状态: 1. 新建状态(New): 线程对象被创建后,就进入了新建状态。例如,Thread thread = new Thread()。 2. 就绪状态(Runnable): 也被称为“可执行状态”。线程对象被创建后,其它线程调用了该对象的start()方法,从而来启动该线程。 ...
分类:
编程语言 时间:
2020-02-17 14:17:36
阅读次数:
52