与另一个任务并行运行任务

Dar*_*der 3 java multithreading executor threadpool

我有以下Foo使用FooProcessor类的类.所以我想要做的是,在运行cp1实例进程方法的同时,我想要运行cp2.process().

public class Foo {

    public static void main(String [] args){

        FooProcessor cp1 = new FooProcessor();
        FooProcessor cp2 = new FooProcessor();

        cp1.process();
        // in parallel process cp2.process();
    }

}

public class FooProcessor {
    public void process(){
        System.out.println("Processing..");
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我想顺序cp1,所以我希望它运行并完成,如果cp2没有完成或失败它是好的.如果它失败了我想加入结果.它没有返回此示例中的任何内容,但我想返回结果.

为此,应该使用TaskExecutor?还是线程?

我只希望cp2与cp1并行运行.或者,如果我添加更多让我们说cp3,我希望它与cp1并行运行.

ass*_*ias 5

总结我实现它的方式:

  • 例如,通过ExecutorService运行不同的进程ExecutorService executor = Executors.newFixedThreadPool(nThreads);
  • 将所有任务的Futures存储在List中(由ExecutorService#submit返回)
  • 等待future1.get()完成,future1未来在哪里与cp1相关联
  • 一旦get返回(cp1已完成)取消所有其他期货,(或shutdownNow执行者服务,如果您不再需要执行人)
  • 要使取消过程正常工作,你的cp2,cp3等需要实现一个中断策略,使它们尽快停止它们正在做的事情.