Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.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 程序在多线程处理中没有顺利结束_Java_Multithreading - Fatal编程技术网

Java 程序在多线程处理中没有顺利结束

Java 程序在多线程处理中没有顺利结束,java,multithreading,Java,Multithreading,我正在我的程序中创建一些线程。在这里,我使用了连接方法,以便主线程将等待我的所有线程。但是,每当我运行这个程序时,它并没有完成所有信息消息的打印,但程序仍然没有顺利结束。有人能帮我解决这个问题吗 下面是我的代码: ArrayList<DeployerThread> threadsarrforjoin = new ArrayList<DeployerThread>(); for (int i = 0; i < serverList.size(); i++) {

我正在我的程序中创建一些线程。在这里,我使用了连接方法,以便主线程将等待我的所有线程。但是,每当我运行这个程序时,它并没有完成所有信息消息的打印,但程序仍然没有顺利结束。有人能帮我解决这个问题吗

下面是我的代码:

ArrayList<DeployerThread> threadsarrforjoin = new ArrayList<DeployerThread>();

for (int i = 0; i < serverList.size(); i++) {
    logger.debug("Inside for loop of buildParameterList()");
    if (serverList.get(i).ServerType.toString().equalsIgnoreCase("SS") &&
        serverList.get(i).GroupNo.toString().equalsIgnoreCase(groupNo)) {
        try {
            nameofthreads.add("PhoinexHyperlink[" +
                               serverList.get(i).ServerIP + "_" +
                               serverList.get(i).ServerType + "]");
            DeployerThread deployerThread = new DeployerThread(serverList.get(i), action);
            logger.info("---- Start thread execution ---- ");
            deployerThread.start();
            threadsarrforjoin.add(deployerThread);

            Thread.sleep(5000);
        } catch (Exception e) {
            System.out.println(e);
            this.logger.error(e.toString());
          }
        count++;
    }
}

for (int i = 0; i < threadsarrforjoin.size(); i++) {
    try {
        this.threadsarrforjoin.get(i).join();
    } catch (InterruptedException ex) {
        logger.error(ex.getMessage());
        Logger.getLogger(StartStopWebServers.class.getName()).log(Level.SEVERE, null, ex);
      }
}
logger.info(taskName + " Completed");
ArrayList threadsarrforjoin=new ArrayList();
对于(int i=0;i
以下是DeployerThread的代码:

public DeployerThread(ServerConfig serverConfig, String actn, String WEBPROC, String WEBPROC1, String WEBPROCIgnore) {
            logger.debug("Inside DeployerThread constructor");
            logger.debug("serverConfig=" + serverConfig);
            logger.debug("Action=" + actn);
            setServerConfig(serverConfig);
            setTaskaction(actn);
            setWebproc(WEBPROC);
            setWebproc1(WEBPROC1);
            setWebprocignore(WEBPROCIgnore);


        }

        public final ServerConfig getServerConfig() {
            return serverConfig;
        }

        public final void setServerConfig(ServerConfig serverConfig) {
            this.serverConfig = serverConfig;
        }

        public void run() {

            logger.debug("Inside threads run method : Start");
            count++;
            logger.debug("Thread number >>>>" + count + "<<<<");


            Thread.currentThread().setName("[" + serverConfig.ServerIP + "_" + serverConfig.ServerType + "]");
           // threadsarrforjoin.add(Thread.currentThread());
            logger.debug("Name given to this thread=" + "[" + serverConfig.ServerIP + "_" + serverConfig.ServerType + "]");
            org.slf4j.MDC.put("userid", buildPath + "/" + taskName + "/" + taskaction + "_" + Thread.currentThread().getName() + ".log");

            logger.info("Deployment started on " + serverConfig.ServerIP + " for " + serverConfig.ServerType + " at " + dateTimeStamp);
            logger.debug("taskname=" + taskName + "_" + serverConfig.ServerType);

            logger.debug("buildPath=" + buildPath);
            runSSH(serverConfig, action, webproc, webproc1, webprocignore);
            logger.debug("Outside threads run method : End");



        }
    }
公共部署线程(ServerConfig ServerConfig、String actn、String WEBPROC、String WEBPROC1、String WEBPROCIgnore){ debug(“内部部署线程构造函数”); logger.debug(“serverConfig=“+serverConfig”); logger.debug(“Action=“+actn”); 设置服务器配置(服务器配置); setTaskaction(actn); setWebproc(WEBPROC); setWebproc1(WEBPROC1); setWebprocignore(WEBPROCIgnore); } 公共最终服务器配置getServerConfig(){ 返回serverConfig; } 公共最终无效设置服务器配置(服务器配置服务器配置){ this.serverConfig=serverConfig; } 公开募捐{ debug(“内部线程运行方法:Start”); 计数++;
logger.debug(“线程号>>>>”+count+“使用JSCH打开的ssh会话似乎没有终止;一个非守护进程线程
连接线程
仍处于活动状态。如果正如您所说,您的程序正在正常运行,请确保断开与JSCH会话的连接


您还可以将会话上的
DaemonThread
属性设置为true,以避免由ConnectThread
会话引起的挂起。必须在
connect()
之前调用setDaemonThread(true)
。要更快地获得更好的帮助,请发布一条消息。这是什么意思“你到底期望什么?你的程序输出什么?到目前为止,我不知道问题出在哪里。“没有顺利结束”这意味着程序正在完全执行,但它似乎仍在等待某些东西。控制并没有返回。在这里,我想确保join在这种情况下能正常工作?因为我认为它会无限期地等待某些东西。您可以进行线程转储(ctrl+break或使用jstack)吗当程序处于该状态时,将其发布。还可以包含DeployerThread的代码。Hi gkamal…我已经用DeployerThread代码编辑了我的问题,还添加了线程转储。请检查。