ThreadPoolExecutor提交过多会报RejectedExecutionException
Topic source第一段不知怎么把格式复制漏了。。
import java.util.concurrent.*;public class executor { public static void main(String[] args) {// ExecutorService executorService = Executors.newFixedThreadPool(6);// ExecutorService executorService = Executors.newCachedThreadPool(); ExecutorService executorService = new ThreadPoolExecutor(4, 8, 60L, TimeUnit.SECONDS, new SynchronousQueue<>(true)); for (int i = 0; i < 8; i++) { String name = Integer.toString(i); executorService.submit(() -> { System.out.println("start task " + name); try { Thread.sleep(1000); } catch (InterruptedException e) { } System.out.println("end task " + name); }); } executorService.shutdown(); }}
思考:
Q1:在FixedRate模式下,假设每秒触发,如果某次任务执行时间超过1秒,后续任务会不会并发执行?
A1:If any execution of this task takes longer than its period, then subsequent executions may start late, but will not concurrently execute.
译:如果此任务的任何执行时间超过其周期,则后续执行可能会延迟开始,但不会并发执行。
Q2:如果任务抛出了异常,后续任务是否继续执行?
A2:If any execution of the task encounters an exception, subsequent executions are suppressed.
译:如果任务的任何执行遇到异常,则将禁止后续任务的执行。
- 1
尘上居然被抢注