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

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

大家讲道理
大家讲道理

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

membalas semua(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
}

Jawapan asal pada 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.  

Andaian di sini ialah semua tugasan akan dilaksanakan dalam masa 1 minit Jika senario itu dipenuhi, ini adalah yang paling mudah.
Jika pelaksanaan mungkin tidak berjaya dalam tempoh tamat masa, atau masa pelaksanaan tidak dapat dinilai, senario mungkin berlaku.
Adakah lebih senang menggunakan kelas ini?

java.util.concurrent.CountDownLatch 

Mungkin terdapat banyak kaedah, dan kaedah yang sesuai dengan pemandangan adalah yang terbaik.
Jawapan lain dalam jawapan stackoverflow asal yang disiarkan di tingkat atas juga mempunyai nilai rujukan

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan