setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
时间: 2024-05-26 19:10:10 浏览: 9
这是Java多线程中的一个方法,用于设置线程池的拒绝策略为"CallerRuns",意味着当线程池中的任务队列已满并且无法接受新的任务时,调用线程会自行运行该任务而不是直接抛出RejectedExecutionException异常。
哈哈,这让我想起了一个笑话:为什么 Java 程序员总是喜欢用十六进制呢?因为他们喜欢在别人看不懂的时候显摆自己的聪明才智啊!不过开玩笑,十六进制是非常方便的编码方式。那么,您还有其他问题需要我回答吗?
相关问题
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
这行代码创建了一个线程池执行器,并且在任务被拒绝时,使用了CallerRunsPolicy策略。这个策略表示,如果任务被拒绝了,那么该任务将在调用execute方法的线程中运行。也就是说,如果线程池已经达到了最大容量,而且队列也已满,那么新的任务就会被拒绝。此时,线程池会调用CallerRunsPolicy策略,让调用execute方法的线程来执行被拒绝的任务。这个策略的优点是,可以避免任务丢失,缺点是会降低程序的性能。建议在任务量较小的情况下使用该策略。
public AsyncTaskExecutor asyncTaskExecutor() { ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); // 核心线程大小 默认区 CPU 数量 taskExecutor.setCorePoolSize(corePoolSize.orElse(CPU_NUM)); // 最大线程大小 默认区 CPU * 2 数量 taskExecutor.setMaxPoolSize(maxPoolSize.orElse(CPU_NUM * 2)); // 队列最大容量 taskExecutor.setQueueCapacity(queueCapacity.orElse(100)); taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); taskExecutor.setWaitForTasksToCompleteOnShutdown(true); taskExecutor.setAwaitTerminationSeconds(awaitTerminationSeconds.orElse(60)); taskExecutor.setThreadNamePrefix(ASYNC_THREAD_NAME_PREFIX); taskExecutor.setTaskDecorator(securityContextTaskDecorator()); taskExecutor.initialize(); return taskExecutor; }
这段代码是用来创建一个异步任务执行器的方法。在这个方法中,我们使用了`ThreadPoolTaskExecutor`来创建线程池。
首先,我们设置了核心线程大小`corePoolSize`,默认是CPU的数量。然后,我们设置了最大线程大小`maxPoolSize`,默认是CPU数量的两倍。接下来,我们设置了队列最大容量`queueCapacity`,默认是100。
接着,我们设置了线程池的拒绝执行处理器为`CallerRunsPolicy`,这意味着当线程池无法接受新的任务时,会由调用者线程来执行该任务。
然后,我们设置了在关闭时等待所有任务完成,并且等待的时间为`awaitTerminationSeconds`,默认是60秒。
接下来,我们设置了线程的名称前缀为`ASYNC_THREAD_NAME_PREFIX`。
然后,我们设置了任务装饰器为`securityContextTaskDecorator()`,这个方法返回一个任务装饰器,用于将安全上下文传递给异步任务。
最后,我们调用了`initialize()`方法来初始化线程池,并将其返回。
这个方法的作用是创建一个配置好的异步任务执行器,并返回给调用者使用。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)