当前位置: 首页 > 面试题库 >

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

商开宇
2023-03-14
问题内容

我有以下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..");
    }
}

但是,我要按顺序cp1,所以我要它运行并完成,如果cp2没有完成或失败,那就很好。如果确实失败,我想加入结果。该示例中未返回任何内容,但我想返回结果。

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

我只希望cp2与cp1并行运行。或者,如果我添加更多内容,例如说cp3,我希望它也可以与cp1并行运行。


问题答案:

总结一下,我的实现方式:

  • 例如,通过ExecutorService运行您的不同进程ExecutorService executor = Executors.newFixedThreadPool(nThreads);
  • 将所有任务的期货存储在列表中(由ExecutorService#submit返回)
  • 等待future1.get()完成,future1将来与cp1链接在哪里
  • 一旦get退货(cp1完成),取消所有其他期货,(或shutdownNow如果不再需要执行者,则取消执行者服务)
  • 为了使取消过程起作用,您的cp2,cp3等需要实施中断策略,以使他们尽快停止正在执行的操作。


 类似资料:
  • 我在gradle项目中添加了一个任务: 现在,任务总是在任务之前运行。这很好,因为构建任务包含许多步骤。现在我想显式禁用其中一个包含的任务。

  • 我正在从事一个spring boot项目,以自动化与gradle的集成测试。我最近开始在一家新企业工作,我的同事们按如下方式运行集成测试:在构建中。gradle文件有一个集成测试任务 启动任务后,应用程序开始在指定端口运行,然后打开postman,导入集合并运行测试。 我的工作是找到一种方法来跳过额外的点击,即自动运行邮递员集合。第一个想法是使用postman-run gradle插件,但由于企业

  • 我有一个任务执行10秒,周期为1秒,没有延迟,另一个任务执行30秒,周期为5秒,当第一个任务完成时。 此外,我需要取消两个任务时,一个按钮被按下。 > 我尝试了基本线程,但将阻塞GUI,直到两个任务都执行 我尝试,但我这里是一个接一个地执行任务,但不是每个任务都定期执行 我尝试了预定的executor,但预定的executor是异步的,我知道如何使用 任何反馈都很感激。

  • 我试着用一个实例并行运行许多计划任务,每一个我这样配置任务 但是有很多实例每秒开始,而第一个实例尚未完成。是否可以同时配置任务运行的一个实例?我的豆子配置在Spring调度器.xml

  • 我有一个spark作业,它从数据库中读取数据,执行过滤、联合、2连接,最后将结果写回数据库。 然而,最后一个阶段仅在50个执行器中的一个执行器上运行一个任务。我试图增加分区的数量,使用哈希分区,但没有成功。 经过几个小时的谷歌搜索,似乎我的数据可能会但我不知道如何解决它。 有什么建议吗? 规格: < li >独立群集 < li>120核心 < li>400G内存 遗嘱 执行 人: 30个执行器(4

  • 我有一个背景图像滚动不断,但我放置了一个菜单在它上面,需要一个按键和音乐在上面。但是,我似乎无法启动keylistener。我的假设是,这是由于for循环,它在到达它的终点之前重新设置了自己。 我希望输出在for循环中运行背景图像,当按下向下箭头时,标题屏幕会改变,但它只运行背景循环