熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java高級技術 >> 正文

Java線程池在運行後的結果反查

2013-11-23 19:40:57  來源: Java高級技術 

  Java線程池需要不斷的學習在學習的時候我們就要注意不少的問題下面我們就來看看具體的語言運作環境如何才能滿足Java線程池相關程序的運行希望大家有所收獲

  無論是接收Runnable型參數還是接收Callable型參數的submit()方法都會返回一個Future(也是一個接口)類型的對象該對象中包含了任務的執行情況以及結果調用Future的boolean isDone()方法可以獲知任務是否執行完畢調用Object get()方法可以獲得任務執行後的返回結果如果此時任務還沒有執行完get()方法會保持等待直到相應的任務執行完畢後才會將結果返回

  我們用下面的一個例子來演示Java中Java線程池的使用

  Java代碼

  import ncurrent*;

  public class ExecutorTest {

  public static void main(String[] args) throws

  InterruptedException

  ExecutionException {

  ExecutorService es = ExecutorsnewSingleThreadExecutor();

  Future fr = essubmit(new RunnableTest());// 提交任務

  Future fc = essubmit(new CallableTest());// 提交任務

  // 取得返回值並輸出

  Systemoutprintln((String) fcget());

  // 檢查任務是否執行完畢

  if (frisDone()) {

  Systemoutprintln(執行完畢RunnableTestrun());

  } else {

  Systemoutprintln(未執行完RunnableTestrun());

  }

  // 檢查任務是否執行完畢

  if (fcisDone()) {

  Systemoutprintln(執行完畢CallableTestrun());

  } else {

  Systemoutprintln(未執行完CallableTestrun());

  }

  // 停止線程池服務

  esshutdown();

  }

  }

  class RunnableTest implements Runnable {

  public void run() {

  Systemoutprintln(已經執行RunnableTestrun());

  }

  }

  class CallableTest implements Callable {

  public Object call() {

  Systemoutprintln(已經執行CallableTestcall());

  return 返回值CallableTestcall();

  }

  }

  import ncurrent*;

  public class ExecutorTest {

  public static void main(String[] args) throws

  InterruptedException

  ExecutionException {

  ExecutorService es = ExecutorsnewSingleThreadExecutor();

  Future fr = essubmit(new RunnableTest());// 提交任務

  Future fc = essubmit(new CallableTest());// 提交任務

  // 取得返回值並輸出

  Systemoutprintln((String) fcget());

  // 檢查任務是否執行完畢

  if (frisDone()) {

  Systemoutprintln(執行完畢RunnableTestrun());

  } else {

  Systemoutprintln(未執行完RunnableTestrun());

  }

  // 檢查任務是否執行完畢

  if (fcisDone()) {

  Systemoutprintln(執行完畢CallableTestrun());

  } else {

  Systemoutprintln(未執行完CallableTestrun());

  }

  // 停止線程池服務

  esshutdown();

  }

  }

  class RunnableTest implements Runnable {

  public void run() {

  Systemoutprintln(已經執行RunnableTestrun());

  }

  }

  class CallableTest implements Callable {

  public Object call() {

  Systemoutprintln(已經執行CallableTestcall());

  return 返回值CallableTestcall();

  }

  }

  運行結果

  已經執行RunnableTestrun()

  已經執行CallableTestcall()

  返回值CallableTestcall()

  執行完畢RunnableTestrun()

  執行完畢CallableTestrun()

  使用完Java線程池後需要調用它的shutdown()方法停止服務否則其中的所有線程都會保持運行程序不會退出


From:http://tw.wingwit.com/Article/program/Java/gj/201311/27283.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.