日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java并发教程–可调用,将来

發布時間:2023/12/3 java 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java并发教程–可调用,将来 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
從Java的第一個發行版開始,Java的美麗之處之一就是我們可以輕松編寫多線程程序并將異步處理引入我們的設計中。 Thread類和Runnable接口與Java的內存管理模型結合使用,意味著可以進行簡單的線程編程。 但是,如第3部分所述, Thread類和Runnable接口均不允許拋出Exception或返回值。 缺乏返回值的問題令人不快。

缺少引發檢查異常的情況更為嚴重。 合同是public void run() ,這意味著您必須捕獲受檢查的異常并對其進行處理。 即使您很小心并且將它們存儲起來以供以后驗證,也不能強制所有使用此類的類來檢查異常。 您可以遍歷所有的獲取器,并在每個異常中都存在異常時拋出該異常 。 除了麻煩之外,即使那也不是萬無一失的。 您無法強制調用其中任何一個。 線程程序員會正確地調用join()以等待它完成,然后可能會繼續前進。

不過不用擔心,多年之后,終于在1.5版本中解決了這個問題。 通過在上一篇文章中討論的CallableFuture接口的引入以及它們在線程池中的支持,這兩個問題都得到了很好的解決。

可召回

Callable接口聲明公共T call()拋出Exception 。 現在我們可以返回結果,將其強類型化為實現中聲明的類型,甚至拋出Exceptions 。 盡管Executors類中有一些實用程序方法可以如第3部分中所述轉換您的Runnable實例,但最好還是回顧一下您當前對RunnableThread子類的實現。 何必呢? 主要是為了仔細檢查并刪除可能為解決缺少對拋出的異常的支持而實施的變通方法。 同時,您可能希望利用在執行方法中直接返回結果的功能,而無需進行強制轉換以檢索值。

未來

這是線程池和Callable的組合功能在一起的地方。 Future是1.5中引入的另一個新接口。 當您向一個線程池提交Callable時 ,將為您提供Future的實例,該實例的類型將傳遞給您傳入的Callable 。此對象替代您在1.5之前使用的實際Thread實例。 以前您必須執行Thread.join()Thread.join(long millis) ,現在您可以像本例中那樣使用它們。

public class ServerAcceptingRequestsVerifier implements Callable {/*** @return Boolean.TRUE is server is accepting requests* Boolean.FALSE otherwise*/public Boolean call() throws Exception {Boolean isAcceptingRequests = null;... ask server about taking requests herereturn isAcceptingRequests;} } public Boolean isServerTakingRequests(String server)throws UnresponsiveException, InterruptedException {ServerAcceptingRequestsVerifier acceptingRequestsVerifier =new ServerAcceptingRequestsVerifier();Future future =THREAD_POOL.submit(acceptingRequestsVerifier);try {Boolean isAcceptingRequests = future.get();//waits for the thread to complete, even if it hasn't startedreturn isAcceptingRequests;} catch (ExecutionException e) {throw new UnresponsiveException(e.getCause());}}

如果決定限制愿意等待完成的時間,那么現在有了顯式的TimeoutException也很好。

try {Boolean isAcceptingRequests = future.get(5, TimeUnit.SECONDS);//this waits for 5 seconds, throwing TimeoutException if not donereturn isAcceptingRequests; } catch (TimeoutException e) {LOGGER.warn("Timed out waiting for server check thread." +"We'll try to interrupt it.");future.cancel(true);return Boolean.FALSE; } catch (ExecutionException e) {throw new UnresponsiveException(e.getCause()); }

在我們的下一篇文章中,我們將介紹一些用于使線程池正常工作的新接口/類,這些接口/類也可供我們使用。

參考:我們的JCG合作伙伴在Carfey Software博客上提供的 Java Concurrency Part 4 – Callable,Future 。

相關文章 :
  • Java并發教程–信號量
  • Java并發教程–重入鎖
  • Java并發教程–線程池
  • Java并發教程–阻塞隊列
  • Java并發教程– CountDownLatch
  • Exchanger和無GC的Java
  • Java Fork / Join進行并行編程
  • 使用迭代器時如何避免ConcurrentModificationException
  • 改善Java應用程序性能的快速技巧

翻譯自: https://www.javacodegeeks.com/2011/09/java-concurrency-tutorial-callable.html

總結

以上是生活随笔為你收集整理的Java并发教程–可调用,将来的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。