Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何实现java future类以实现并行性,从而为多个并发连接调用shell脚本_Java_Shell_Parallel Processing_Concurrent.futures - Fatal编程技术网

如何实现java future类以实现并行性,从而为多个并发连接调用shell脚本

如何实现java future类以实现并行性,从而为多个并发连接调用shell脚本,java,shell,parallel-processing,concurrent.futures,Java,Shell,Parallel Processing,Concurrent.futures,我使用Java future类来实现并行编程。我正在调用shell脚本,如下所示。我正在从java控制器调用下面的函数 String NodeResult=restartNodes(HostName); future类的控制器实现 public static String restartNodes(final String hostName){ ExecutorService executor = Executors.newFixedThreadPool(threadNum);

我使用Java future类来实现并行编程。我正在调用shell脚本,如下所示。我正在从java控制器调用下面的函数

 String NodeResult=restartNodes(HostName);
future类的控制器实现

 public static String restartNodes(final String hostName){
   ExecutorService executor = Executors.newFixedThreadPool(threadNum);
    List<FutureTask<Integer>> taskList = new  ArrayList<FutureTask<Integer>>();

    // Start thread for the first half of the numbers
    FutureTask<Integer> futureTask_1 = new FutureTask<Integer>(new Callable<Integer>() {
        @Override
        public Integer call() throws Exception {

            restartScript(hostName);


            return SUCCESS;
        }
    });
    taskList.add(futureTask_1);
    executor.execute(futureTask_1);
    return "successfully done";
}
我正在调用多个脚本,我希望它们能够并行执行,但在执行时,我发现了以下错误

 com.jcraft.jsch.JSchException: session is down
at com.jcraft.jsch.Session.openChannel(Session.java:752)
at net.neoremind.sshxcute.core.SSHExec.exec(SSHExec.java:164)
at com.controller.UserLoginController.isNodeLive(UserLoginController.java:1620)
at com.controller.UserLoginController$3.call(UserLoginController.java:1724)
at com.controller.UserLoginController$3.call(UserLoginController.java:1)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)

是他们获得ssh会话的任何最大限制,即并发会话,因为我将执行5个这样的脚本,具有不同的目的,我希望所有这些脚本都将并行进行。如果我们使用未来类

你在哪里等待线程结束?@Mzf你的意思是我必须在调用每个脚本结束后等待,然后移动到下一个脚本?我试图调用多个脚本,但没有一个脚本被调用,我得到了上述错误。就像我使用for循环而不是future类来完成一样,一切都很好。
 com.jcraft.jsch.JSchException: session is down
at com.jcraft.jsch.Session.openChannel(Session.java:752)
at net.neoremind.sshxcute.core.SSHExec.exec(SSHExec.java:164)
at com.controller.UserLoginController.isNodeLive(UserLoginController.java:1620)
at com.controller.UserLoginController$3.call(UserLoginController.java:1724)
at com.controller.UserLoginController$3.call(UserLoginController.java:1)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)