Java 5.0的五個特性

來源:互聯網
上載者:User

至今,毫無疑問你已經看過不止一篇網上文章列舉了Java5.0的偉大的語言新特性:泛型,標註,枚舉類型,自動裝箱,可變參數, for/in迴圈,甚至靜態引入。我也認為這些是偉大的特性,但是,你已經讀過他們了。因此,在此我將集中於你可能沒有聽說過的Java5.0的新API特性。

  那麼,在下面,是我喜歡的Java5.0的五個新API特性。那些看完本文後的細心的讀者會發現額外的獎勵—第六個特性:很少有人知道的Java5.0支援的新語言文法,當然使用者就更少了。我非常喜歡它,因為它很新異。

  Callable 和 Future 介面

  我喜歡的第一個特性發掘自新的java.util.concurrent包。如它的名字暗示的,這是個並行編程工具包。在此有很多要探索的,而我要提的第一喜歡的特性是TimeUnit枚舉類型。TimeUnit讓我感興趣的是它包含有用的時間相關工具--你通過一個枚舉常量來調用它們,該常量代表度量時間的單位。例如:

TimeUnit.MILLISECONDS.sleep(200);


  然而,TimeUnit並不是最值得誇獎的。java.util.concurrent最強大的特性之一是它的任務-執行/線程-池結構。ExecutorService介面提供了執行任務的能力。Executors類定義了Factory 方法用於擷取使用線程池的ExecutorService的實現。這是強大的要素。

  我所喜歡的任務-執行架構的部分是它如何表現任務以及執行它的結果:Callable和Future介面。我們都熟悉用於定義線程的Runnable介面和它的run()方法。Callable像Runnable,但它的方法叫做call(),並且這個方法可以返回一個結果或者拋出一個異常,而這兩點是Runnable.run()做不到的。

  Callable是一個泛型,並且它的結果已經參數化。例如,一個計算BigInteger的任務,是Callable<BigInteger>,並且它的方法call()被聲明為返回BigInteger。下面是僅有三行代碼的Callable介面:

public interface Callable<V> {
      V call() throws Exception;
  }

  當我想要非同步執行一個Callable任務,我將它傳遞給ExecutorService的submit()方法。submit()的傳回值—這也是我喜歡的部分—是一個Future對象:本質上是一個對將來某時刻的結果的“借條”。如果我準備使用我的工作的結果,我簡單的調用Future對象的get()方法即可。如果任務的執行已完成,那麼get()立刻返回結果。否則,它將阻塞直到結果可用。如果Callable拋出異常,那麼get()方法將該異常封裝為ExecutionException並且拋出它。Future還有方法用來對任務的執行進行取消和查詢狀態,但是你必須自己尋找它們(這些方法)。Future也用了泛型,並且結果的類型也參數化了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.