JAVA 多线程-拒绝策略

116 阅读1分钟
1.  AbortPolicy:默认策略,在需要拒绝任务时抛出RejectedExecutionException1.  CallerRunsPolicy:直接在 execute 方法的调用线程中运行被拒绝的任务,如果线程池已经关闭,任务将被丢弃;
1.  DiscardPolicy:直接丢弃任务;
1.  DiscardOldestPolicy:丢弃队列中等待时间最长的任务,并执行当前提交的任务,如果线程池已经关闭,任务将被丢弃

我们也可以自定义拒绝策略,只需要实现 RejectedExecutionHandler;需要注意的是,拒绝策略的运行需要指定线程池和队列的容量。

image.png

  • AbortPolicy :丢弃任务,并抛出异常

image.png

  • CallerRunsPolicy: 将被拒绝的任务添加到"线程池中正在运行的线程"中去执行

image.png

image.png

  • DiscardPolicy 丢弃任务,但不抛出的异常

image.png

  • DiscardOldestPolicy 丢弃队列最前面的任务,然后重新执行任务。 图片中丢弃线程4的任务,执行线程9的任务