有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

同时运行多个线程池(ExecutorService)的java

我有一个对象需要运行4个场景。我想把它分成两个线程(这样我就可以发送到另一个服务器) 我让这两台服务器都能正常工作,但在试图清理代码的过程中,我创建了这样的代码

 ExecutorService executor1 = Executors.newFixedThreadPool(1);
 ExecutorService executor2 = Executors.newFixedThreadPool(1);

 executor1.execute(userProvisioner1);
 executor1.execute(userProvisioner2);
 executor2.execute(userProvisioner3);
 executor2.execute(userProvisioner4);

 executor1.shutdown();
 executor2.shutdown();

 while (!executor1.isTerminated()&!executor2.isTerminated()) {
 }

userProvisioner1&userProvisioner2需要按顺序运行(就像3&4一样),但可以沿着彼此的一侧运行

这确实有效,但自从尝试同时使用这两个池以来,我遇到了一些问题。这是游泳池的问题还是其他问题


共 (1) 个答案

  1. # 1 楼答案

    如果需要顺序活动,可以调用一个任务,然后调用另一个任务。在您的案例中,简单的解决方案是这样的

    ExecutorService exec = Executors.newFixedThreadPool(2);
    
    exec.execute(new Runnable() {
        public void run() {
            userProvisioner1.run();
            userProvisioner2.run();
        }
    });
    exec.execute(new Runnable() {
        public void run() {
            userProvisioner3.run();
            userProvisioner4.run();
        }
    });
    
    exec.shutdown();
    exec.awaitTermination();