背景:由于搞活动,有瞬时流量,好多请求被前置系统拦截。由于前置系统长时间,得不到后端的响应,就认为后端处理器繁忙,然后就拦截请求,不在放行。 根本原因: 线程池配置:20 核心线程数,最大线数也是20,阻塞队列1万。 解决办法:尝试调大最大线程数为100,但是还是没改变,原因,来的请求都先入阻塞队列 ...
分类:
其他好文 时间:
2020-07-02 23:22:36
阅读次数:
130
6.1LockSupport 跟wait()不同! 引入了一个许可证的概念。 void park()方法 检测此时的线程是否拥有许可证,有的话。就通过,没有的话就阻塞。 LockSupport.park():在哪儿调用就是检查哪个线程 void unpark(Thread thread)方法 Loc ...
分类:
编程语言 时间:
2020-06-28 20:24:13
阅读次数:
65
1. java常见队列: (1) ArrayBlockingQueue: 一个基于数组结构的有界阻塞队列, FIFO(先进先出)。(2) LinkedBlockingQueue: 一个基于链表结构的阻塞队列, 此队列按FIFO (先进先出) 排序元素, 吞吐量通常要高于ArrayBlockingQu ...
分类:
编程语言 时间:
2020-06-25 21:19:17
阅读次数:
345
进程,线程,协程,以及golang协程和python协程的区别。 1. 进程 进程是系统进行资源分配和调度的一个独立单位,程序段、数据段、PCB三部分组成了进程实体(进程映像),PCB是进程存在的唯一标准 1.1 进程的组织方式: 链接方式 按照进程状态将PCB分为多个队列,就绪队列,阻塞队列等 操 ...
分类:
编程语言 时间:
2020-06-23 10:24:57
阅读次数:
65
阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。 这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当 队列满时,存储元素的线程会等待队列可用。 阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消 费者是从队列里拿元素的线程。阻塞队列就是生产 ...
分类:
其他好文 时间:
2020-06-21 16:04:43
阅读次数:
78
一、ReentrantLock原理 ReentrantLock是一个可重入的独占锁,同时只能有一个线程可以获取该锁,其他获取该锁的线程会被阻塞而放入该锁的AQS阻塞队列里面。ReentrantLock最终是使用AQS来实现的,并且根据参数来决定其内部是一个公平锁还是非公平锁,默认是非公平锁。 pub ...
分类:
其他好文 时间:
2020-06-18 12:49:04
阅读次数:
63
一、线程池介绍、作用 线程池可以看做是线程的集合。在没有任务时线程处于空闲状态,当请求到来:线程池给这个请求分配一个空闲的线程,任务完成后回到线程池中等待下次任务(而不是销毁)。这样就实现了线程的重用。 我们来看看如果没有使用线程池的情况是这样的: 为每个请求都新开一个线程! public clas ...
分类:
编程语言 时间:
2020-06-18 01:54:28
阅读次数:
73
好的,TinyWebServer我们讲了八个模块中的5个,还剩下数据库mysql模块,定时器timer模块,日记log模块。 (更新中~~~~~~) mysql模块 项目中有简单的注册和登录功能,所以要使用到数据库。那么mysql模块就是数据库相关的模块,主要的其实就是数据库连接池。 首先数据库连接 ...
分类:
编程语言 时间:
2020-06-13 19:41:42
阅读次数:
77
一、定义 时延队列,只要经过一段时间后才能从队列中取出。 特点: 1、无界的阻塞队列。 2、只能存放实现了Delayed接口的对象 时延就是通过getDelay获取的,getDelay<=0时,才能取出队列中的值 3、内部使用PriorityQueue , 比较的就是时延 二、使用 代码样例 pub ...
分类:
其他好文 时间:
2020-06-08 23:19:16
阅读次数:
78
这里区分一下: 1、如果使用的是无界队列 LinkedBlockingQueue,也就是无界队列的话,没关 系,继续添加任务到阻塞队列中等待执行,因为 LinkedBlockingQueue 可以近乎 认为是一个无穷大的队列,可以无限存放任务 2、如果使用的是有界队列比如 ArrayBlocking ...
分类:
编程语言 时间:
2020-06-08 00:58:41
阅读次数:
344