Java 8并发 – 等待任务关闭执行程序
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java 8并发 – 等待任务关闭执行程序,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1497字,纯文字阅读大概需要3分钟。
内容图文
![Java 8并发 – 等待任务关闭执行程序](/upload/InfoBanner/zyjiaocheng/811/ed037179a3b04be5b4e1f61e1fe9146a.jpg)
我正在尝试Java 8并发的第一步.
在下面的代码示例中,抛出异常,因为我的任务睡眠时间为2秒.关闭功能等待5秒钟终止.因此,只执行两个循环.有没有动态解决方案,而不是计算执行可能采取的最大时间和调整awaitTermination() – 方法的值?
public class Application {
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(1);
IntStream.range(0, 10).forEach(i ->
executor.submit(() -> {
try {
TimeUnit.SECONDS.sleep(2);
System.out.println("Hello");
} catch (InterruptedException e) {
throw new IllegalStateException("Task interrupted", e);
}
})
);
shutdown(executor);
}
private static void shutdown(ExecutorService executor) {
try {
executor.shutdown();
executor.awaitTermination(5, TimeUnit.SECONDS);
} catch (InterruptedException e) {
System.err.println("tasks interrupted");
} finally {
if (!executor.isTerminated()) {
System.err.println("cancel non-finished tasks");
}
executor.shutdownNow();
}
}
解决方法:
添加到@AdamSkyWalker提到的你可以使用CountDownLatch,因为你已经知道了线程的数量(在这种情况下为10).
public static void main(String[] args) throws Exception {
ExecutorService executor = Executors.newFixedThreadPool(1);
final CountDownLatch latch = new CountDownLatch(10);
IntStream.range(0, 10).forEach(i ->
executor.submit(() -> {
try {
TimeUnit.SECONDS.sleep(2);
System.out.println("Hello");
} catch (InterruptedException e) {
throw new IllegalStateException("Task interrupted", e);
} finally {
latch.countDown();
}
})
);
latch.await();
}
}
我在比较CountDownLatch,Semaphore和CyclicBarrier时写了一个post,这将对你有所帮助.
内容总结
以上是互联网集市为您收集整理的Java 8并发 – 等待任务关闭执行程序全部内容,希望文章能够帮你解决Java 8并发 – 等待任务关闭执行程序所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。