У меня есть родительский поток [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 минуты, отметив, что дочерний потокпоток завершает свою работу до конца.