线程池的取值与拒绝策略

public ThreadPoolExecutor(int corePoolSize,                          int maximumPoolSize,                          long keepAliveTime,                          TimeUnit unit,                          BlockingQueue<Runnable> workQueue,                          ThreadFactory threadFactory,                          RejectedExecutionHandler handler)

先估算一个并发数,即为corePoolSize,*1.2为maximumPoolSizeworkQueue长度=可容忍的时间/线程平均响应时间*corePoolSize,假设每个线程0.1s,可以容忍2s内给客户端返回,则队列可容纳20倍的corePoolSize,比如有线程池有10个线程,0.1秒过10个线程,2s过20*10=200,容量可取200,最多2s队列末尾的线程也可以获得执行并返回给客户端

参考:https://www.cnblogs.com/waytobestcoder/p/5323130.html
==================================================================

jvm内存有限,不可能容纳无限线程,否则内存爆掉,我们需要一定的拒绝策略,首先要拒绝,其次又要保留一定的信息,以便日后分析作出调整
private static class MyRejectedExecutionHandler implements RejectedExecutionHandler {

private static Logger LOGGER = LoggerFactory.getLogger(MyRejectedExecutionHandler.class);

@Override    public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {        LOGGER.error("thread discard");    }}

注意,如果是callable get方式,这种情况会导致get无限阻塞,注意设置超时限制

==================================================================

https://www.cnblogs.com/longzhaoyu/p/4539341.html这篇文章比较有意思,厘米的拒绝策略:
public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
                    if (!executor.isShutdown()) {
                        executor.execute(r);
                    }
                }

stack over flow

原文地址:https://www.cnblogs.com/silyvin/p/9339137.html

时间: 2024-10-09 04:47:20

线程池的取值与拒绝策略的相关文章

线程池的取值(三)阻塞队列边界取值

在上一篇中,线程池的取值(二)设计吞吐量 重要,使用无界的LinkedBlockingQueue来接收等待队列,我们将阻塞队列改为36来看看: import java.util.concurrent.*; /** * https://www.cnblogs.com/silyvin/p/11806859.html * https://www.cnblogs.com/silyvin/p/11875907.html * Created by joyce on 2019/11/6. */ @Benchm

线程池的生命周期和拒绝策略

线程有5种状态:新建状态,就绪状态,运行状态,阻塞状态,死亡状态.线程池也有5种状态:然而,线程池不同于线程,线程池的5种状态是:RUNNING, SHUTDOWN, STOP, TIDYING, TERMINATED. 线程池状态定义代码如下: private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0)); private static final int COUNT_BITS = Integer.SIZE - 3

Python练习【利用线程池爬取电影网站信息】

功能实现 爬取猫眼电影TOP100(http://maoyan.com/board/4?offset=90) 1). 爬取内容: 电影名称,主演, 上映时间,图片url地址保存到文件中; 2). 文件名为topMovie.csv; 3). 记录方式: 电影名称:主演:上映时间:图片url地址:评分; 4). 并爬取的信息保存在数据库中; 5). 使用多线程/线城池实现; 编程思路 1.利用多线程分配任务 2.编写单线程的任务实现功能 (1)获取指定url页面信息. (2)从指定信息中匹配所需的信

梨视频,进程池、线程池爬取

[TOC] 进程池 import requests, re, time from multiprocessing.dummy import Pool import random IpPool = [{'http': '183.147.230.104: 8118'}, {'http': '60.217.64.237: 31923'}, {'http': '221.193.50.166: 8118'}] url = 'https://www.pearvideo.com/category_loadin

Java - &quot;JUC线程池&quot; 线程状态与拒绝策略源码分析

Java多线程系列--"JUC线程池"04之 线程池原理(三) 本章介绍线程池的生命周期.在"Java多线程系列--"基础篇"01之 基本概念"中,我们介绍过,线程有5种状态:新建状态,就绪状态,运行状态,阻塞状态,死亡状态.线程池也有5种状态:然而,线程池不同于线程,线程池的5种状态是:Running, SHUTDOWN, STOP, TIDYING, TERMINATED. 线程池状态定义代码如下: private final AtomicI

JDK线程池的拒绝策略

关于新疆服务请求未带入来话原因的问题 经核查,该问题是由于立单接口内部没有成功调用接续的 "更新来电原因接口"导致的,接续测更新来电原因接口编码:NGCCT_UPDATESRFLAG_PUT ,立单接口调用代码如下: final Map<String, Object> paramsMap = outputObject.getBean(); paramsMap.put("provCode", provCode); paramsMap.put("t

线程池的4种拒绝策略

1.ThreadPoolExecutor类实现了ExecutorService接口和Executor接口,可以设置线程池corePoolSize,最大线程池大小,AliveTime,拒绝策略等.常用构造方法: ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit,BlockingQueue workQueue, RejectedExecutionHandler han

Java多线程系列--“JUC线程池”05之 线程池原理(四)

拒绝策略介绍 线程池的拒绝策略,是指当任务添加到线程池中被拒绝,而采取的处理措施.当任务添加到线程池中之所以被拒绝,可能是由于:第一,线程池异常关闭.第二,任务数量超过线程池的最大限制. 线程池共包括4种拒绝策略,它们分别是:AbortPolicy, CallerRunsPolicy, DiscardOldestPolicy和DiscardPolicy. AbortPolicy -- 当任务添加到线程池中被拒绝时,它将抛出 RejectedExecutionException 异常. Calle

java多线程系类:JUC线程池:05之线程池原理(四)(转)

概要 本章介绍线程池的拒绝策略.内容包括:拒绝策略介绍拒绝策略对比和示例 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3512947.html 拒绝策略介绍 线程池的拒绝策略,是指当任务添加到线程池中被拒绝,而采取的处理措施.当任务添加到线程池中之所以被拒绝,可能是由于:第一,线程池异常关闭.第二,任务数量超过线程池的最大限制. 线程池共包括4种拒绝策略,它们分别是:AbortPolicy, CallerRunsPolicy, DiscardOld