一起运行多个线程池(ExecutorService)

时间:2014-08-15 16:38:22

标签: java multithreading executorservice

我有一个对象需要运行4个场景。我想在两个线程之间拆分(所以我可以发送到另一个服务器) 我得到了这个工作到2台服务器,但在尝试清理代码时我创建了这样的东西;

 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所示),但可以相互并行运行。

这确实有效,但自从尝试一次使用2个池以来,我遇到了问题。这是游泳池或其他问题吗?

1 个答案:

答案 0 :(得分:4)

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

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();