Tag: 执行者

永久运行的任务的Java执行者最佳实践

我正在做一个Java项目,我需要有多个任务asynchronous运行。 我被引导相信Executor是我做这件事的最好方式,所以我对此熟悉了。 (Yay得到报酬学习!)然而,我不清楚什么是最好的方式是完成我想要做的事情。 为了争论,让我们说我有两个任务运行。 预计也不会终止,并且两者都应该在申请期限内运行。 我试图写一个主包装类,使: 如果任一任务引发exception,包装器将捕获它并重新启动任务。 如果任何一个任务运行完成,包装将通知并重新启动任务。 现在需要注意的是,这两个任务的实现都会将run()中的代码封装在一个永远不会完成的无限循环中,而try / catch块应该能够处理所有的运行时exception而不会中断循环。 我试图增加另一层确定性; 如果我或者跟随我的人做了一些愚蠢的事情,使得这些保护措施失败,并停止这项任务,那么应用程序需要做出适当的反应。 是否有一个最好的做法来解决这个问题,比我更有经验的人会推荐? FWIW,我掀起了这个testing课: public class ExecTest { private static ExecutorService executor = null; private static Future results1 = null; private static Future results2 = null; public static void main(String[] args) { executor = Executors.newFixedThreadPool(2); while(true) { try { checkTasks(); Thread.sleep(1000); } catch (Exception […]

如何从Executors正确捕获RuntimeExceptions?

说我有以下代码: ExecutorService executor = Executors.newSingleThreadExecutor(); executor.execute(myRunnable); 现在,如果myRunnable抛出一个RuntimeExcpetion ,我怎么能抓住它? 一种方法是将我自己的ThreadFactory实现提供给newSingleThreadExecutor()并为其中的newSingleThreadExecutor()设置自定义的uncaughtExceptionHandler 。 另一种方法是将myRunnable包装为包含try-catch- myRunnable的本地(匿名) Runnable 。 也许还有其他类似的解决方法。 但是…不知怎的,这感觉很脏,我觉得它不应该是这么复杂。 有一个干净的解决scheme吗?

如何使ThreadPoolExecutor的submit()方法块如果饱和?

我想创build一个ThreadPoolExecutor ,以便当它达到其最大值并且队列已满时, sumbit()方法会在尝试添加新任务时阻塞。 我是否需要实现一个自定义的RejectedExecutionHandler ,或者是否有一个现有的方法来使用标准的Java库做到这一点?