java - 如何获知new Runnable(){run(){}}中的逻辑执行完毕?
大家讲道理
大家讲道理 2017-04-18 10:01:57
0
2
516

如何知道写在runnable()中的逻辑执行完毕??

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

répondre à tous(2)
巴扎黑
ExecutorService es = Executors.newCachedThreadPool();
for(int i=0;i<5;i++)
    es.execute(new Runnable() { /*  your task */ });
es.shutdown();
try{
    //等待线程执行完毕
    boolean finshed = es.awaitTermination(1, TimeUnit.MINUTES);
    if (finished){
        //do something
    }
}catch(InterruptedException e){
    //timeout
}

Réponse originale sur StackOverflow.

刘奇
boolean awaitTermination(long timeout,TimeUnit unit)throws InterruptedException

Blocks until all tasks have completed execution after a shutdown request, or the timeout occurs, or the current thread is interrupted, whichever happens first.  

L'hypothèse ici est que toutes les tâches seront exécutées en 1 minute. Si le scénario est respecté, c'est le plus simple.
Si l'exécution risque d'échouer dans le délai d'attente, ou si le temps d'exécution ne peut pas être évalué, le scénario peut se produire.
Est-il plus pratique d'utiliser cette classe ?

java.util.concurrent.CountDownLatch 

Il peut y avoir plusieurs méthodes, et celle qui convient à la scène est la meilleure.
Les autres réponses de la réponse originale de stackoverflow publiée à l'étage ont également une valeur de référence

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal