核心线程是10个,最大线程是30个,缓冲线程20个,现在有40个线程访问,多出的ThreadPoolTaskExecutor会怎么处理
时间: 2024-03-21 16:04:27 浏览: 44
当有40个线程访问时,由于ThreadPoolTaskExecutor的核心线程数是10个,而最大线程数是30个,因此前10个线程能够被立即执行,接下来的20个线程会被放入缓冲队列中等待执行,而剩余的10个线程会被创建新的线程来执行。此时线程池中的线程数已经达到最大线程数,因此不会再有新的线程被创建。而对于多出来的ThreadPoolTaskExecutor,由于线程池中的线程数已经达到了最大线程数,因此它们不会被使用。如果此时再有新的任务到来,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就会直接丢弃新的任务。总之,当线程池中线程数已经达到最大线程数时,再有新的任务到来,就会进行拒绝处理。
核心线程是10个,最大线程是30个,缓冲线程20个,现在有30个线程访问,多出的10个ThreadPoolTaskExecutor会怎么处理
当有30个线程访问时,由于ThreadPoolTaskExecutor的核心线程数是10个,而最大线程数是30个,因此前10个线程能够被立即执行,而后面的20个线程会被放入缓冲队列中等待执行。如果此时仍然有新的线程访问,由于缓冲队列已满且当前线程数已经达到最大线程数,ThreadPoolTaskExecutor就会根据拒绝策略进行处理。如果使用默认的AbortPolicy拒绝策略,ThreadPoolTaskExecutor就会直接抛出RejectedExecutionException异常,表示拒绝执行新的任务;如果使用CallerRunsPolicy拒绝策略,ThreadPoolTaskExecutor就会将任务回退到调用线程中执行;如果使用DiscardPolicy拒绝策略,ThreadPoolTaskExecutor就会直接丢弃新的任务。
阅读全文