특정 작업에 대해 몇 가지 작업을 수행하는 Java GUI 응용 프로그램에서 작업했습니다. ExecutorService를 사용하여이 작업을 수행했습니다. 이제는 여러 스레드로 작업해도 문제가 없지만 GUI를 차단하고 싶지는 않습니다. 사용자는 현재 작업을 취소하고 다른 작업을 요청할 수 있습니다. 그러나 ExecutorService를 사용하는 동안 내 주요 스레드가 차단됩니다. ExecutorService를 사용하여 호출 된 자식 스레드가 GUI에서 계속 작업 할 수있을 때까지 기다려야합니다.자식 스레드 Finishe 때까지 기다리십시오, 그러나 주 스레드를 차단하지 마십시오.
업데이트 된 코드는 다음과 같습니다
ExecutorService child = Executors.newCachedThreadPool();
ExecutorService es = Executors.newCachedThreadPool();
@Action
public void doAction() {
/** Some Code goes here */
if(Condition){
if(!(es.isTerminated()||es.isShutdown())){
es.shutdownNow();
es = Executors.newCachedThreadPool();
}
es.execute(new Runnable() {
public void run() {
if(!(child.isTerminated()||child.isShutdown())){
child.shutdownNow();
child = Executors.newCachedThreadPool();
}
for(loopConditions){
child.execute(new Runnable() {
public void run() {
//Perform Some Task Here
}
});
}
child.shutdown();
try {
boolean finshed = child.awaitTermination(5, TimeUnit.MINUTES);
} catch (InterruptedException ex) {
child.shutdownNow();
Logger.getLogger(MySearchView.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println("All Child Threads finished Execution");
}
});
es.shutdown();
try {
boolean finshed = es.awaitTermination(5, TimeUnit.MINUTES);
} catch (InterruptedException ex) {
es.shutdownNow();
Logger.getLogger(MySearchView.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println("All Threads finished Execution");
/**
* Code that should run after all Threads finishes their Execution
*/
}
}
ExecutorService를 사용하는 이유는 무엇입니까 (틀린 것은 틀림). 어쩌면 다른 방법이있을 수 있습니다. 아마도 ExecutorService가 적절한 방법 일 것입니다. – mKorbel