簡體   English   中英

Java NIO Http客戶端請求線程池

[英]Java NIO Http client requests with thread pools

線程池執行器使用未來任務的線程數。 它會分配至少一個線程,直到run()或call()返回。

所以,我對如何使用線程池進行JAVA NIO HTTP請求感到困惑。

1)哪個線程將運行事件循環

2)由於線程不會阻塞IO,它們將退出run / call方法。 然后誰負責調用他們的處理程序。

我的問題是如何使用基於Java NIO的HTTP POST客戶端請求與線程池(由於我們需要進行大量的HTTP請求),或者使用Java NIO,實際上不需要在多個線程上運行它們,因為線程永遠不會睡覺(它總是執行,因為沒有什么可以阻止)

好的,這就是哲學。 多線程可以使用2種口味(可能更多,但在這種情況下並不重要)。 傳統的多線程使用線程和阻塞I / O. 任務級多線程(請建議更好的術語)建立在傳統的多線程之上,並受到以下限制:

  • Runnable類型的任務是一個工作單元;
  • 任務可能不會阻止;
  • 如果一個任務想要等待一個長事件(例如完成I / O或時間間隔),它會准備另一個任務並安排它在事件之后運行,並退出(從Runnable.run()返回)。

任務被提交以執行到線程池。

異步I / O非常適合面向任務的模型。 期貨是面向線程和面向任務的編程風格之間的粘合劑。 它們可用於將信息從任務傳遞到線程,但不能反向傳遞,因為任務可能不會阻塞。 所以在設計完全異步服務器時根本不需要使用Futures。

NIO1需要一個選擇器線程。 單獨創建並運行線程池。 NIO2(java7)不需要選擇器線程(它在后台維護它,以便用戶不要打擾)。

很容易找到NIO服務器的示例。 df4j包含NIO1和NIO2的echo-servers(但不是http服務器)的示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM