最大线程是10个,缓冲线程20个,现在有30个线程访问,多出的10个ThreadPoolTaskExecutor会怎么处理
时间: 2023-07-28 20:56:31 浏览: 79
当有30个线程访问时,由于ThreadPoolTaskExecutor的最大线程数是10个,而缓冲线程数是20个,因此只有10个线程能够被执行,剩余的20个线程会被放入缓冲队列中等待执行。如果此时再有新的线程访问,由于缓冲队列已满,ThreadPoolTaskExecutor就会根据拒绝策略进行处理,默认的拒绝策略是AbortPolicy,即直接抛出RejectedExecutionException异常,表示拒绝执行新的任务。可以通过设置rejectedExecutionHandler来自定义拒绝策略,比如可以使用CallerRunsPolicy策略,将任务回退到调用线程中执行,或者使用DiscardPolicy策略,直接丢弃新的任务。
相关问题
核心线程是10个,最大线程是30个,缓冲线程20个,现在有30个线程访问,多出的10个ThreadPoolTaskExecutor会怎么处理
当有30个线程访问时,由于ThreadPoolTaskExecutor的核心线程数是10个,而最大线程数是30个,因此前10个线程能够被立即执行,而后面的20个线程会被放入缓冲队列中等待执行。如果此时仍然有新的线程访问,由于缓冲队列已满且当前线程数已经达到最大线程数,ThreadPoolTaskExecutor就会根据拒绝策略进行处理。如果使用默认的AbortPolicy拒绝策略,ThreadPoolTaskExecutor就会直接抛出RejectedExecutionException异常,表示拒绝执行新的任务;如果使用CallerRunsPolicy拒绝策略,ThreadPoolTaskExecutor就会将任务回退到调用线程中执行;如果使用DiscardPolicy拒绝策略,ThreadPoolTaskExecutor就会直接丢弃新的任务。
核心线程是10个,最大线程是30个,缓冲线程20个,现在有40个线程访问,多出的10个ThreadPoolTaskExecutor会怎么处理
当有40个线程访问时,由于ThreadPoolTaskExecutor的核心线程数是10个,而最大线程数是30个,因此前10个线程能够被立即执行,接下来的20个线程会被放入缓冲队列中等待执行,而剩余的10个线程会被创建新的线程来执行。此时线程池中的线程数已经达到最大线程数,因此如果此时再有新的线程访问,ThreadPoolTaskExecutor就会根据拒绝策略进行处理。如果使用默认的AbortPolicy拒绝策略,ThreadPoolTaskExecutor就会直接抛出RejectedExecutionException异常,表示拒绝执行新的任务;如果使用CallerRunsPolicy拒绝策略,ThreadPoolTaskExecutor就会将任务回退到调用线程中执行;如果使用DiscardPolicy拒绝策略,ThreadPoolTaskExecutor就会直接丢弃新的任务。总之,当线程池中线程数已经达到最大线程数时,再有新的任务到来,就会进行拒绝处理。
阅读全文