Проблема с потоком Java использует Jsch, который присоединяется к родительскому потоку с тайм-аутом - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть родительский поток [p], который создает другой дочерний поток [c].Дочерний поток присоединяется к родительскому потоку со значением TIMEOUT.

Проблема в том, что родительский поток продолжает свою работу, пока значение TIMEOUT не передается.

Примечание.дочерний поток запускает команды, используя Jsch API, и ожидает, пока outputtream зарегистрирует и проверит завершенность процесса на машине Linux.

Процесс на машине Linux - это сценарий оболочки, который выполняет другой процесс Java с действием SLEEPкаждую минуту, но у меня нет доступа к его логике.

Код работает правильно с другими подобными процессами, и я действительно имитировал проблему локально, и она отлично работает.

public class ExecuteBatchFileThread extends Thread {
    @Override
    public void run() {
        JSch jsch = new JSch();
        Session ...
        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
        String line;
        while ((line = reader.readLine()) != null) {
          // print line
        }
    }
}


public class JobExecuter extends Thread {
    // logic goes here
}


public class BatchRunnerExecuter extends JobExecuter {
    @Override
    public void run() {
        ExecuteBatchFileThread executerBatchThread = new ExecuteBatchFileThread();
        executerBatchThread.start();
        executerBatchThread.join(100000);

        // print done
    }
}

Ожидаемый результат: Родительпоток ожидает, пока дочерний поток не будет выполнен или не пройден TIMEOUT.

Фактический вывод: истекло время ожидания родительского потока после того, как дочерний поток получил сообщение через Buffered Reader, что процесс Linux спит в течение 1 минуты, отметив, что дочерний потокпоток завершает свою работу до конца.

...