java - 如何运行具有相关任务的并发作业?

标签 java concurrency java.util.concurrent

我有一个需要处理的情况

我有一个具有发送方法的类,例如

@Singleton
class SendReport {

 public void send() {}
}

send 方法是从用户点击网页时调用的,必须立即返回,但必须启动一系列需要时间的任务

send
 ->|
   | |-> Task1
 <-|      |
        <-|
          | 
        |-> Task2 (can only start when Task1 completes/throws exception)
        <-|
          | 
        |-> Task3 (can only start when Task2 completes/throws exception)
        <-|

我是 Java 并发世界的新手,正在阅读相关内容。根据我的理解,我需要一个 Executor Servicesubmit() 一个作业(Task1)来处理并获取 Future 返回继续。

我说得对吗?

对我来说理解和设计最困难的部分是
- 如何以及在哪里处理任何此类任务的异常?
- 据我所知,我必须做类似的事情吗?

    ExecutorService executorService = Executors.newFixedThreadPool(1);
    Future futureTask1 = executorService.submit(new Callable(){
    public Object call() throws Exception {
        System.out.println("doing Task1");
        return "Task1 Result";
    }
    });
    if (futureTask1.get() != null) {
    Future futureTask2 = executorService.submit(new Callable(){
    public Object call() throws Exception {
        System.out.println("doing Task2");
        return "Task2 Result";
    }
    }
    ... and so on for Task 3

正确吗? 如果是,有更好的推荐方法吗?

谢谢

最佳答案

Dependent task execution使用 Dexecutor 让一切变得简单

免责声明:我是所有者

这里是一个例子,它可以很容易地运行下面的复杂图,你可以引用this了解更多详情

enter image description here

这里是an example

关于java - 如何运行具有相关任务的并发作业?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29637692/

相关文章:

java - 是否可以通过设计从 Redis 提供陈旧数据?

java - Spring Security - 注销期间的并发请求

java - ConcurrentHashMap 有什么缺点吗?

java - 在递归迭代时从列表中删除元素会引发异常

java - 编译我的项目时是否编译依赖项本身?

java - 如何从jTable中删除数据库中的数据?

java - Firebase 中的 getValue() 方法是什么?

多线程模式下的Java集合算法

arrays - 将 slice 传递给用于 go 例程的函数

java - 多线程与 ThreadPoolExecutor