- 浏览: 624704 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (819)
- java开发 (110)
- 数据库 (56)
- javascript (30)
- 生活、哲理 (17)
- jquery (36)
- 杂谈 (15)
- linux (62)
- spring (52)
- kafka (11)
- http协议 (22)
- 架构 (18)
- ZooKeeper (18)
- eclipse (13)
- ngork (2)
- dubbo框架 (6)
- Mybatis (9)
- 缓存 (28)
- maven (20)
- MongoDB (3)
- 设计模式 (3)
- shiro (10)
- taokeeper (1)
- 锁和多线程 (3)
- Tomcat7集群 (12)
- Nginx (34)
- nodejs (1)
- MDC (1)
- Netty (7)
- solr (15)
- JSON (8)
- rabbitmq (32)
- disconf (7)
- PowerDesigne (0)
- Spring Boot (31)
- 日志系统 (6)
- erlang (2)
- Swagger (3)
- 测试工具 (3)
- docker (17)
- ELK (2)
- TCC分布式事务 (2)
- marathon (12)
- phpMyAdmin (12)
- git (3)
- Atomix (1)
- Calico (1)
- Lua (7)
- 泛解析 (2)
- OpenResty (2)
- spring mvc (19)
- 前端 (3)
- spring cloud (15)
- Netflix (1)
- zipkin (3)
- JVM 内存模型 (5)
- websocket (1)
- Eureka (4)
- apollo (2)
- idea (2)
- go (1)
- 业务 (0)
- idea开发工具 (1)
最新评论
-
sichunli_030:
对于频繁调用的话,建议采用连接池机制
配置TOMCAT及httpClient的keepalive以高效利用长连接 -
11想念99不见:
你好,我看不太懂。假如我的项目中会频繁调用rest接口,是要用 ...
配置TOMCAT及httpClient的keepalive以高效利用长连接
并发编程--线程池Executor(一)
http://blog.csdn.net/qq924862077/article/details/75305297
在分析ThreadPoolExecutor的构造参数时,有一个RejectedExecutionHandler参数。
RejectedExecutionHandler是一个接口:
里面只有一个方法。当要创建的线程数量大于线程池的最大线程数的时候,新的任务就会被拒绝,就会调用这个接口里的这个方法。
可以自己实现这个接口,实现对这些超出数量的任务的处理。
ThreadPoolExecutor自己已经提供了四个拒绝策略,分别是CallerRunsPolicy,AbortPolicy,DiscardPolicy,DiscardOldestPolicy
这四个拒绝策略其实一看实现方法就知道很简单
自定义拒绝策略
通过看前面的系统提供的四种拒绝策略可以看出,拒绝策略的实现都非常简单。自己写亦一样
比如现在想让被拒绝的任务在一个新的线程中执行,可以这样写:
然后正常使用:
参考:http://blog.csdn.net/qq_25806863/article/details/71172823
java多线程 ThreadPoolExecutor 策略的坑
无论是使用jdk的线程池ThreadPoolExecutor 还是spring的线程池ThreadPoolTaskExecutor 都会使用到一个阻塞队列来进行存储线程任务。
当线程不够用时,则将后续的任务暂存到 阻塞队列中,等待有空闲线程来进行。
当这个阻塞队列满了的时候,会出现两种情况
正在运行的线程数量小于 maximumPoolSize,那么还是要创建线程运行这个任务;
正在运行的线程数量大于或等于 maximumPoolSize,那么线程池会通过一个策略进行对后续的任务进行处理。
参考:https://www.cnblogs.com/lic309/p/4564507.html
ThreadPoolExecutor详解
http://blog.csdn.net/lipc_/article/details/52025993
Java Executor并发框架(三)ThreadFactory介绍
http://blog.csdn.net/pfnie/article/details/52756738
ThreadPoolExecutor线程池参数设置技巧
https://www.cnblogs.com/waytobestcoder/p/5323130.html
http://blog.csdn.net/qq924862077/article/details/75305297
在分析ThreadPoolExecutor的构造参数时,有一个RejectedExecutionHandler参数。
RejectedExecutionHandler是一个接口:
public interface RejectedExecutionHandler { void rejectedExecution(Runnable r, ThreadPoolExecutor executor); }
里面只有一个方法。当要创建的线程数量大于线程池的最大线程数的时候,新的任务就会被拒绝,就会调用这个接口里的这个方法。
可以自己实现这个接口,实现对这些超出数量的任务的处理。
ThreadPoolExecutor自己已经提供了四个拒绝策略,分别是CallerRunsPolicy,AbortPolicy,DiscardPolicy,DiscardOldestPolicy
这四个拒绝策略其实一看实现方法就知道很简单
自定义拒绝策略
通过看前面的系统提供的四种拒绝策略可以看出,拒绝策略的实现都非常简单。自己写亦一样
比如现在想让被拒绝的任务在一个新的线程中执行,可以这样写:
static class MyRejectedExecutionHandler implements RejectedExecutionHandler { @Override public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) { new Thread(r,"新线程"+new Random().nextInt(10)).start(); } }
然后正常使用:
ThreadPoolExecutor executor = new ThreadPoolExecutor(1, 2, 30, TimeUnit.SECONDS, new LinkedBlockingDeque<Runnable>(2), new MyRejectedExecutionHandler());
参考:http://blog.csdn.net/qq_25806863/article/details/71172823
java多线程 ThreadPoolExecutor 策略的坑
无论是使用jdk的线程池ThreadPoolExecutor 还是spring的线程池ThreadPoolTaskExecutor 都会使用到一个阻塞队列来进行存储线程任务。
当线程不够用时,则将后续的任务暂存到 阻塞队列中,等待有空闲线程来进行。
当这个阻塞队列满了的时候,会出现两种情况
正在运行的线程数量小于 maximumPoolSize,那么还是要创建线程运行这个任务;
正在运行的线程数量大于或等于 maximumPoolSize,那么线程池会通过一个策略进行对后续的任务进行处理。
参考:https://www.cnblogs.com/lic309/p/4564507.html
ThreadPoolExecutor详解
http://blog.csdn.net/lipc_/article/details/52025993
Java Executor并发框架(三)ThreadFactory介绍
http://blog.csdn.net/pfnie/article/details/52756738
ThreadPoolExecutor线程池参数设置技巧
https://www.cnblogs.com/waytobestcoder/p/5323130.html
发表评论
-
BigDecimal/Long 前后端交互失去精度解决方法
2024-01-22 10:31 377BigDecimal/Long 前后端交互失去精度解决方法 ... -
在Java 8中可以通过下面的方式获取Map对象的第一个元素
2023-12-18 13:48 304Java 8中如何获取Map对象的第一个元素 -
用EXCEL批量生成INSERT语句
2023-03-18 11:19 670用EXCEL批量生成INSERT语句 -
使用Java访问FTP文件时再次调用方法client.retrieveFileStream(ftpFile)会返回null的问题
2023-01-07 21:50 697使用Java访问FTP文件时再次调用方法client.retr ... -
java获取本月最后一天
2022-12-28 08:29 2327java获取本月第一天或者最后一天方法 @Test ... -
www
2022-11-12 09:03 0public void saveTransScheduleBi ... -
Notepad++删除代码中的注释,可删除//单行注释和/**/多行注释
2022-10-20 14:17 720Notepad++删除代码中的注释,可删除//单行注释和/** ... -
接口限流算法有哪些
2022-05-05 23:27 225接口限流的几种算法 接口限流算法有哪些? nginx限流方案 ... -
CompletableFuture学习记录
2022-04-25 18:00 220CompletableFuture学习记录 -
java单例模式几种实现方式
2022-04-18 11:48 231java单例模式几种实现方式 -
临时的几个网站
2022-03-31 13:33 243https://www.cnblogs.com/chengxu ... -
Java Stream - 如何filter带谓词
2022-03-23 23:53 227Java Stream Java Lambda语法 J ... -
URLConnection的连接、超时、关闭用法总结
2022-03-08 17:23 549URLConnection的连接、超时、关闭用法总结 jav ... -
关于java中的this::
2022-02-26 23:07 198关于java中的this:: -
StringRedisTemplate和RedisTemplate的区别和选择
2022-02-10 23:05 240StringRedisTemplate和RedisTempla ... -
ForkJoinPool初略分析
2022-02-10 11:44 263ForkJoinPool初略分析 多线程 ForkJoin ... -
service中@NotNull的使用
2022-01-23 13:48 1477@Validated和@NotNull加到什么上面,接口还是 ... -
Java8 Collectors.toMap的两个大坑
2022-01-21 15:54 298Java8 Collectors.toMap的两个大坑 -
踩坑之SimpleAsyncTaskExecutor
2022-01-13 20:50 800踩坑之SimpleAsyncTaskExecutor Sp ... -
都在建议你不要直接使用 @Async 注解
2022-01-10 11:54 748引用如果不自定义异步方法的线程池默认使用SimpleAsync ...
相关推荐
最后,让我们通过一个简单的示例代码来演示如何使用ThreadPoolExecutor和RejectedExecutionHandler接口来实现线程池的拒绝策略。 ```java package com.cfang; import java.util.concurrent.BlockingQueue; import ...
线程池原理-ThreadPoolExecutor源码解析 1.构造方法及参数 2.阻塞对列: BlockingQueue 3.线程工厂: DefaultThreadFactory 4.拒绝策略: RejectedExecutionHandler 5.执行线程 Executor
如果当前线程池中的线程数量已经达到 `maximumPoolSize`,那么将会根据 `RejectedExecutionHandler` 的拒绝策略来处理新任务。 4. **线程的销毁**:当线程池中的线程数量大于 `corePoolSize` 时,那些超过 `...
handler表示线程池对拒绝任务的处理策略。 二、线程池的使用 使用ThreadPoolExecutor类可以创建一个线程池,线程池可以维护一定数量的线程,用于执行任务。任务可以通过execute(Runnable)方法被添加到线程池,任务...
- 如果放入任务失败或线程池状态发生变化(如变为 `SHUTDOWN`),则采取拒绝策略处理任务。 4. **创建非核心线程**: - 如果任务队列已满或者线程池状态不允许放入新任务,尝试创建非核心线程来立即处理新任务。 ...
* handler:线程池对拒绝任务的处理策略 二、线程池ThreadPoolExecutor的使用简介 当我们使用ThreadPoolExecutor时,需要首先创建一个ThreadPoolExecutor对象,然后将任务提交给线程池。任务可以是任何实现了...
线程池的拒绝策略(RejectedExecutionHandler)也很重要,当任务超出处理能力时,它决定如何处理额外的任务。此外,线程池监控是维护系统稳定性的重要手段。监控方法如getTaskCount(), getCompletedTaskCount(), ...
4. 当线程数达到最大值且任务队列已满,新提交的任务会被拒绝,此时可以设置一个`RejectedExecutionHandler`来处理这种情况,例如丢弃任务或抛出异常。 在实际应用中,我们可能还需要关注线程池的监控和调优,例如...
线程池创建的时候,如果不指定拒绝策略就默认是AbortPolicy策略。当然,你也可以自己实现RejectedExecutionHandler接口,比如将任务存在数据库或者缓存中,这样就数据库或者缓存中获取到被拒绝掉的任务了。
2. **创建线程池**:使用ThreadPoolExecutor构造函数,传入上述配置参数,以及线程工厂ThreadFactory(用于创建新线程)和拒绝策略RejectedExecutionHandler(处理无法执行的任务)。 3. **提交任务**:通过...
在提供的"线程池示例"文件中,应该包含了创建和使用线程池的代码示例,你可以参考并进行扩展,例如添加更多任务、调整线程池参数,或者实现自定义的线程工厂和拒绝策略,以加深对线程池的理解。
示例代码`TestThreadPool`创建了一个线程池,其中corePoolSize为2,maximumPoolSize为4,keepAliveTime为3秒,工作队列大小为3,拒绝策略为`ThreadPoolExecutor.CallerRunsPolicy()`。这意味着当工作队列满时,提交...
`ThreadPoolTaskExecutor`提供了丰富的功能,如自定义拒绝策略、线程工厂、线程池的关闭等。例如,我们可以设置一个自定义的`RejectedExecutionHandler`来处理当任务无法被线程池接受时的情况,或者通过`shutdown`和...
- **拒绝策略(RejectedExecutionHandler handler)**:当线程池和工作队列都满时,处理新提交任务的策略,常见的有AbortPolicy、CallerRunsPolicy、DiscardPolicy和DiscardOldestPolicy。 2. **线程池的生命周期*...
7. **拒绝策略(RejectedExecutionHandler)**:当线程池和任务队列都满时,新任务的处理策略。常见的策略有抛出异常、直接忽略、调用系统守护线程执行或取消任务。 `ThreadPoolExecutor`的创建通常使用`Executors`...
当线程数达到`maximumPoolSize`且队列已满,线程池会根据配置的拒绝策略`RejectedExecutionHandler`来处理新任务。 1.2 Java线程池的核心配置 1) `corePoolSize`: 核心线程数,这些线程即使在没有任务需要执行时也...
// 拒绝策略 ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor( corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, threadFactory, handler); ``` ...
5. `rejectedExecutionHandler`:拒绝策略,当线程池和任务队列都无法接受新任务时,该策略将决定如何处理。 在Spring配置文件中,我们可以这样定义一个`ThreadPoolTaskExecutor`: ```xml <!-- 可选的...
6. `rejectedExecutionHandler`(可选):拒绝策略,当工作队列也满了,且线程池达到最大线程数时,线程池会执行此策略处理新提交的任务。常见的拒绝策略包括抛出异常、调用`AbortPolicy`(默认)、丢弃最旧任务或...