如何实现java future类以实现并行性,从而为多个并发连接调用shell脚本
我使用Java future类来实现并行编程。我正在调用shell脚本,如下所示。我正在从java控制器调用下面的函数如何实现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);
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)