Java線程池在運(yùn)行后的結(jié)果反查
Java線程池需要不斷的學(xué)習(xí),在學(xué)習(xí)的時(shí)候我們就要注意不少的問題。下面我們就來看看具體的語(yǔ)言運(yùn)作環(huán)境如何才能滿足Java線程池相關(guān)程序的運(yùn)行。希望大家有所收獲。
無論是接收Runnable型參數(shù),還是接收Callable型參數(shù)的submit()方法,都會(huì)返回一個(gè)Future(也是一個(gè)接口)類型的對(duì)象。該對(duì)象中包含了任務(wù)的執(zhí)行情況以及結(jié)果。調(diào)用Future的boolean isDone()方法可以獲知任務(wù)是否執(zhí)行完畢;調(diào)用Object get()方法可以獲得任務(wù)執(zhí)行后的返回結(jié)果,如果此時(shí)任務(wù)還沒有執(zhí)行完,get()方法會(huì)保持等待,直到相應(yīng)的任務(wù)執(zhí)行完畢后,才會(huì)將結(jié)果返回。
我們用下面的一個(gè)例子來演示Java5.0中Java線程池的使用:
Java代碼
- import java.util.concurrent.*;
- public class ExecutorTest {
- public static void main(String[] args) throws
InterruptedException,- ExecutionException {
- ExecutorService es = Executors.newSingleThreadExecutor();
- Future fr = es.submit(new RunnableTest());// 提交任務(wù)
- Future fc = es.submit(new CallableTest());// 提交任務(wù)
- // 取得返回值并輸出
- System.out.println((String) fc.get());
- // 檢查任務(wù)是否執(zhí)行完畢
- if (fr.isDone()) {
- System.out.println("執(zhí)行完畢-RunnableTest.run()");
- } else {
- System.out.println("未執(zhí)行完-RunnableTest.run()");
- }
- // 檢查任務(wù)是否執(zhí)行完畢
- if (fc.isDone()) {
- System.out.println("執(zhí)行完畢-CallableTest.run()");
- } else {
- System.out.println("未執(zhí)行完-CallableTest.run()");
- }
- // 停止線程池服務(wù)
- es.shutdown();
- }
- }
- class RunnableTest implements Runnable {
- public void run() {
- System.out.println("已經(jīng)執(zhí)行-RunnableTest.run()");
- }
- }
- class CallableTest implements Callable {
- public Object call() {
- System.out.println("已經(jīng)執(zhí)行-CallableTest.call()");
- return "返回值-CallableTest.call()";
- }
- }
- import java.util.concurrent.*;
- public class ExecutorTest {
- public static void main(String[] args) throws
InterruptedException,- ExecutionException {
- ExecutorService es = Executors.newSingleThreadExecutor();
- Future fr = es.submit(new RunnableTest());// 提交任務(wù)
- Future fc = es.submit(new CallableTest());// 提交任務(wù)
- // 取得返回值并輸出
- System.out.println((String) fc.get());
- // 檢查任務(wù)是否執(zhí)行完畢
- if (fr.isDone()) {
- System.out.println("執(zhí)行完畢-RunnableTest.run()");
- } else {
- System.out.println("未執(zhí)行完-RunnableTest.run()");
- }
- // 檢查任務(wù)是否執(zhí)行完畢
- if (fc.isDone()) {
- System.out.println("執(zhí)行完畢-CallableTest.run()");
- } else {
- System.out.println("未執(zhí)行完-CallableTest.run()");
- }
- // 停止線程池服務(wù)
- es.shutdown();
- }
- }
- class RunnableTest implements Runnable {
- public void run() {
- System.out.println("已經(jīng)執(zhí)行-RunnableTest.run()");
- }
- }
- class CallableTest implements Callable {
- public Object call() {
- System.out.println("已經(jīng)執(zhí)行-CallableTest.call()");
- return "返回值-CallableTest.call()";
- }
- }
運(yùn)行結(jié)果:
已經(jīng)執(zhí)行-RunnableTest.run()
已經(jīng)執(zhí)行-CallableTest.call()
返回值-CallableTest.call()
執(zhí)行完畢-RunnableTest.run()
執(zhí)行完畢-CallableTest.run()
使用完Java線程池后,需要調(diào)用它的shutdown()方法停止服務(wù),否則其中的所有線程都會(huì)保持運(yùn)行,程序不會(huì)退出。
【編輯推薦】