public static void main(String[] args) {
LinkedBlockingQueue parallelPullQueue = new LinkedBlockingQueue<Runnable>(1);
ExecutorService parallelPullExecutor = new ThreadPoolExecutor(2, 2, 0, TimeUnit.MILLISECONDS, parallelPullQueue,new ThreadPoolExecutor.DiscardPolicy());
ArrayList<Future> newArrayList = Lists.newArrayList();
for (int i = 0; i < 5; i++) {
AtomicInteger a = new AtomicInteger(i);
Future<?> e = parallelPullExecutor.submit(()->{try {
Thread.sleep(2000);
System.out.println(a.get());
} catch (InterruptedException e1) {
e1.printStackTrace();
}});
newArrayList.add(e);
}
for (Future future : newArrayList) {
try {
future.get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
System.out.println("end");
}
解决办法1:放弃使用DiscardPolicy,选用其他策略
2:future.get带上时限