线程池丢弃策略为CallerRunsPolicy时,来了一个任务,发现当前运行线程已经等于最大线程数,caller线程在忙怎么办?
线程池丢弃策略为DiscardOldestPolicy时,来了一个任务,发现当前运行线程已经等于最大线程数,但这时队列为空(SynchronousQueue)时怎么办
线程池丢弃策略为CallerRunsPolicy时,来了一个任务,发现当前运行线程已经等于最大线程数,caller线程在忙怎么办?
线程池丢弃策略为DiscardOldestPolicy时,来了一个任务,发现当前运行线程已经等于最大线程数,但这时队列为空(SynchronousQueue)时怎么办
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
额,这个问题,问的有点奇怪。线程的拒绝策略是在队列已经满了,最大线程数也满的情况下才会接入的。
那么当调用拒绝策略的时候,队列就不应该为空。如果为空,DiscardOldestPolicy尝试丢弃最老的队列任务,把本次任务加入,那么队列为空就无法丢弃,直接把本次任务加入到第一位咯
CallerRunsPolicy如果caller在忙,就阻塞了,就等着。。
让我们看看源码