Der Threadpool-Executor wird parallel zum Hauptthread ausgeführt. Der Haupt-Thread wartet nicht bis zum Herunterfahren des Executors.ThreadpoolExecutor und Hauptthread, die parallel ausgeführt werden
public static void main(String[] args) {
Date jobStartTime = null;
LOGGER.info("MainApp::Job started");
try {
MainApp obj = new MainApp();
// Getting the job Id of the job
String jobName=args[0]; //batch name
String fileName=args[1]; //sqoop file
LOGGER.info("MainApp::jobName: "+jobName+" fileName "+fileName);
currentJobID = obj.getMaxJobId(jobName);
LOGGER.info("MainApp:Job Id is" + currentJobID);
// Getting the start time of the job
jobStartTime = commonDB.getTime();
LOGGER.info("MainApp:Job Start time is" + jobStartTime);
JobDetails job=new JobDetails(currentJobID,jobName,fileName);
// Reading and parsing the sqoop file and executing the sqoop commands
CommandGenerator exec=new CommandGenerator();
List<TableInfo> commandList = exec.parseAndExec(job);
ThreadPoolExecutor tp = (ThreadPoolExecutor) Executors.newFixedThreadPool(10);
for (final TableInfo table : commandList) {
ParallelExecutor pe = new ParallelExecutor(table);
tp.execute(pe);
}
tp.shutdown();
while(!tp.isShutdown()){
}
job=new JobDetails(currentJobID,jobName,fileName,jobStartTime);
//put everything in one method
StatusAndMailUtils status=new StatusAndMailUtils();
status.onJobCompletion(job);
} catch (Exception e) {
// TODO Auto-generated catch block
LOGGER.info("MainApp::Exception");
e.printStackTrace();
}
}
Ich habe die while-Schleife verwendet, um den Haupt-Thread zu warten, während die Executor-Threads in Bearbeitung sind. Aber es hilft nicht. Bitte lassen Sie mich wissen, wie Sie den Haupt-Thread warten lassen können.
while(!tp.isShutdown()){
}
Das Problem ist, die Aufgaben, die ich ausführe, laufen lange und ich bin nicht sicher, wenn diese Aufgaben abgeschlossen werden. Also kann ich die Zeitüberschreitung nicht bereitstellen. –
@angularBeginner Warum nicht? Sicher werden Sie wissen, dass sie in weniger als 10 Jahren fertig sind. – Kayaman