java怎么判斷線程池是否執(zhí)行完畢

小億
163
2023-08-20 03:36:47

在Java中,可以使用ExecutorService來(lái)創(chuàng)建線程池,然后利用isTerminated()方法來(lái)判斷線程池是否執(zhí)行完畢。

下面是一個(gè)示例代碼:

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class Main {
public static void main(String[] args) {
// 創(chuàng)建線程池
ExecutorService executor = Executors.newFixedThreadPool(3);
// 提交任務(wù)
for (int i = 0; i < 5; i++) {
executor.submit(new Task(i));
}
// 關(guān)閉線程池
executor.shutdown();
// 等待所有任務(wù)執(zhí)行完畢
try {
executor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 判斷線程池是否執(zhí)行完畢
if (executor.isTerminated()) {
System.out.println("線程池執(zhí)行完畢");
} else {
System.out.println("線程池還在執(zhí)行中");
}
}
static class Task implements Runnable {
private int id;
public Task(int id) {
this.id = id;
}
@Override
public void run() {
System.out.println("任務(wù) " + id + " 正在執(zhí)行");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("任務(wù) " + id + " 執(zhí)行完畢");
}
}
}

在上面的示例中,我們創(chuàng)建了一個(gè)固定大小為3的線程池,并提交了5個(gè)任務(wù)。然后使用awaitTermination()方法等待所有任務(wù)執(zhí)行完畢,并使用isTerminated()方法判斷線程池是否執(zhí)行完畢。

運(yùn)行示例代碼,輸出結(jié)果為:

任務(wù) 0 正在執(zhí)行
任務(wù) 1 正在執(zhí)行
任務(wù) 2 正在執(zhí)行
任務(wù) 0 執(zhí)行完畢
任務(wù) 3 正在執(zhí)行
任務(wù) 1 執(zhí)行完畢
任務(wù) 4 正在執(zhí)行
任務(wù) 2 執(zhí)行完畢
任務(wù) 3 執(zhí)行完畢
任務(wù) 4 執(zhí)行完畢
線程池執(zhí)行完畢

可以看到,當(dāng)所有任務(wù)執(zhí)行完畢后,輸出了"線程池執(zhí)行完畢"的提示。

0