ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(2, 2, 10, TimeUnit.SECONDS, new ArrayBlockingQueue<>(3), new ThreadFactory() {
@Override
public Thread newThread(Runnable r) {
Thread thread = new Thread(r);
thread.setName("欢迎关注微信公众号“大雄和你一起学编程”" + atomicInteger.getAndIncrement());
return thread;
}
}, new RejectedExecutionHandler() {
@Override
public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
System.out.println("任务被拒绝了哦,欢迎关注微信公众号“大雄和你一起学编程”");
}
});
for (int i = 0; i < 6; i++) {
// 我们提交6个任务,按照上边的配置,应该会拒绝一个
int finalI = i;
threadPoolExecutor.execute(() -> {
try {
Thread.sleep(1000);
System.out.println("任务" + finalI + "执行完了,欢迎关注大雄和你一起学编程");
} catch (InterruptedException e) {
e.printStackTrace();
}
});
}
// 运行的结果如下
// 任务被拒绝了哦,欢迎关注微信公众号“大雄和你一起学编程”
// 任务1执行完了,欢迎关注大雄和你一起学编程
// 任务0执行完了,欢迎关注大雄和你一起学编程
// 任务2执行完了,欢迎关注大雄和你一起学编程
// 任务3执行完了,欢迎关注大雄和你一起学编程
// 任务4执行完了,欢迎关注大雄和你一起学编程
for (int i = 0; i < 6; i++) {
int finalI = i;
Future<Integer> future = threadPoolExecutor.submit(new Callable<Integer>() {
@Override
public Integer call() throws Exception {
int sum = 0;
for (int j = 0; j < finalI * 10; j++) {
sum += j;
if (j == 39) {
sum = j / 0;
}
}
return sum;
}
});
try {
Integer integer = null;
integer = future.get();
System.out.println("任务执行结果:" + integer);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
// 输出如下:
// 任务执行结果:0
// 任务执行结果:45
// 任务执行结果:190
// 任务执行结果:435
// java.util.concurrent.ExecutionException: java.lang.ArithmeticException: / by zero
// at java.util.concurrent.FutureTask.report(FutureTask.java:122)
// at java.util.concurrent.FutureTask.get(FutureTask.java:192)
// at com.xiong.concurrent.threadpoll.Demo_06_01_1_ThreadPoll.main(Demo_06_01_1_ThreadPoll.java:54)
// Caused by: java.lang.ArithmeticException: / by zero
// at com.xiong.concurrent.threadpoll.Demo_06_01_1_ThreadPoll$3.call(Demo_06_01_1_ThreadPoll.java:46)
// at com.xiong.concurrent.threadpoll.Demo_06_01_1_ThreadPoll$3.call(Demo_06_01_1_ThreadPoll.java:39)
// at java.util.concurrent.FutureTask.run(FutureTask.java:266)
// at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
// at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
// at java.lang.Thread.run(Thread.java:748)
// java.util.concurrent.ExecutionException: java.lang.ArithmeticException: / by zero
// at java.util.concurrent.FutureTask.report(FutureTask.java:122)
// at java.util.concurrent.FutureTask.get(FutureTask.java:192)
// at com.xiong.concurrent.threadpoll.Demo_06_01_1_ThreadPoll.main(Demo_06_01_1_ThreadPoll.java:54)
// Caused by: java.lang.ArithmeticException: / by zero
// at com.xiong.concurrent.threadpoll.Demo_06_01_1_ThreadPoll$3.call(Demo_06_01_1_ThreadPoll.java:46)
// at com.xiong.concurrent.threadpoll.Demo_06_01_1_ThreadPoll$3.call(Demo_06_01_1_ThreadPoll.java:39)
// at java.util.concurrent.FutureTask.run(FutureTask.java:266)
// at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
// at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
// at java.lang.Thread.run(Thread.java:748)