この問題は、「process()」メソッドが10個のスレッドを完了するまでにかなりの時間がかかるため、tt.shutdownService()が直ちに実行されたことになります。 shutdownService()が他のスレッドの後、つまりprocess()の実行後に確実に実行されるようにする方法は?他のスレッドで他のアクティビティの後にExecutorServiceオブジェクトをシャットダウンする方法はありますか?
public class ThreadTest{
private ExecturoService service;
void main(String[] args){
long startTime = System.currentTimeLillis();
ThreadTest tt = new ThreadTest();
tt.process();
tt.shutdownService();
long endTime = System.currentTimeLillis();
}
public ThreadTest(){
service = Executors.newFixedThreadPool(10);
}
public void process(){
...
service.execute(new Runnable){...}
}
public void shutdownService(){
if(service != null){
service.shutdown();
service.awaitTermination(60, TimeUnit.SECONDS);
}
}
}
私の実際のプログラムはもう少し複雑です。 process()はループ内で複数回呼び出されるため、process()でサービスをシャットダウンできません。ここで私はケースを単純化した。
さらにご覧ください。 – user697911
@ user697911あなたの追加は、すべてのタスクが完了するまでではなく、60秒間だけ待機します。 – Tavo