Java中實現並行請求兩種方式
來源:coderidea
在Java中實現並行請求通常涉及到多執行緒或者併發工具類的使用。以下是兩種常見的並行請求模板:一種使用 ExecutorService
來管理執行緒池,另一種使用 Java 8 引入的 CompletableFuture
。
使用 ExecutorService 實現並行請求
以下是一個使用 ExecutorService
建立固定大小執行緒池,併發執行多個任務的模板:
import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.TimeUnit;public class ParallelRequestExecutor { public void executeTasks(List<Runnable> tasks, int timeoutInSeconds) { ExecutorService executorService = Executors.newFixedThreadPool(tasks.size()); try { // 提交所有任務到執行緒池 for (Runnable task : tasks) { executorService.submit(task); } // 關閉執行緒池,不再接受新任務 executorService.shutdown(); // 等待所有任務完成,或超時 if (!executorService.awaitTermination(timeoutInSeconds, TimeUnit.SECONDS)) { executorService.shutdownNow(); // 超時後強制關閉 } } catch (InterruptedException e) { executorService.shutdownNow(); Thread.currentThread().interrupt(); // 保持中斷狀態 } }}
使用 CompletableFuture 實現並行請求
另一種方法是使用 CompletableFuture
,這是Java 8引入的一個強大的併發工具,可以方便地處理非同步程式設計問題。
import java.util.List;import java.util.concurrent.CompletableFuture;import java.util.stream.Collectors;public class ParallelRequestExecutor { public void executeTasks(List<Runnable> tasks) { List<CompletableFuture<Void>> futures = tasks.stream() .map(task -> CompletableFuture.runAsync(task)) .collect(Collectors.toList()); CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join(); }}
在這個示例中, CompletableFuture.runAsync
將每個任務非同步地提交到 ForkJoinPool.commonPool()
中執行。然後 CompletableFuture.allOf
用於等待所有任務的完成。
注意事項
在使用執行緒池時,合理配置執行緒池的大小是非常重要的。執行緒池大小應該根據任務的型別和系統資源來決定。
CompletableFuture
提供了豐富的API來處理非同步任務,包括異常處理、結果轉換等。在任何情況下,確保正確處理異常和執行緒中斷,以避免資源洩露或其他潛在問題。
對於 I/O 密集型任務(如HTTP請求),可以考慮使用比CPU核心數更多的執行緒;對於計算密集型任務,則通常設定執行緒數與CPU核心數相同。
這些並行請求模板可以根據您的具體需求進行調整和最佳化。
來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/70024924/viewspace-3000041/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 在lua中操作http請求有兩種方式HTTP
- axios(xhr) 和 fetch 兩種請求方式iOS
- Android小知識-剖析Retrofit中網路請求的兩種方式Android
- Java實現Http請求JavaHTTP
- java解決請求跨域的兩種方法Java跨域
- Java中Elasticsearch 實現分頁方式(三種方式)JavaElasticsearch
- MyBatis中主鍵回填的兩種實現方式MyBatis
- 關於多執行緒的兩種實現方式執行緒
- SpringBoot實現熱部署兩種方式!Spring Boot熱部署
- 兩種方式實現輪播圖
- Java中Singleton的三種實現方式解析Java
- Spring實現IOC容器的兩種實現方式Spring
- Java實現多執行緒的三種方式Java執行緒
- Python多種介面請求方式示例Python
- Java執行groovy指令碼的兩種方式Java指令碼
- Java中確保執行緒安全最常用的兩種方式Java執行緒
- 在Java中,使用HttpUtils實現傳送HTTP請求JavaHTTP
- Java中實現執行緒的方式Java執行緒
- Spring Boot 中實現定時任務的兩種方式Spring Boot
- Java建立多執行緒的幾種方式實現Java執行緒
- php下請求url的幾種方式PHP
- 在 DotNetty 中實現同步請求Netty
- 前端--實現隔行變色的兩種方式前端
- ViewPager兩種方式實現無限輪播Viewpager
- 兩種方式實現橫向滾動條
- JAVA中實現單例(Singleton)模式的八種方式Java單例模式
- Java中建立並寫檔案的5種方式Java
- 合併HTTP請求vs並行HTTP請求,到底誰更快?HTTP並行
- 合併HTTP請求 vs 並行HTTP請求,到底誰更快?HTTP並行
- 力扣演算法經典第一題——兩數之和(Java兩種方式實現)力扣演算法Java
- Spring Boot中的 6 種API請求引數讀取方式Spring BootAPI
- curl 傳送 POST 請求的四種方式
- POSTMAN HTTP請求的四種方式區別PostmanHTTP
- Java兩種方式實現連結串列的刪除,返回頭結點Java
- java webservice 帶請求頭方式處理JavaWeb
- java執行緒實現方式Java執行緒
- SSH整合實現分頁查詢(兩種方式)
- Spring宣告式事務的兩種實現方式Spring