簡體   English   中英

在Tomcat / Jetty中進行多線程的正確方法

[英]Correct way of doing multithreading inside Tomcat/Jetty

這是我的用例。

  1. 客戶端向服務器發送請求。
  2. 服務器需要執行以下2.a. 進行網絡呼叫以獲取一些數據(D)。
    2.B. 創建處理器(P)以處理數據。
  3. P處理D並將響應發送回客戶端

創建處理器很昂貴(大約1-3秒)。但它不依賴於數據D.

我的計划是使用兩個不同的線程並行執行網絡調用和處理器創建。

我從未在app服務器中完成多線程編程。 我的問題是在應用服務器(特別是Tomcat和Jetty)中處理線程的最佳方法是什么

謝謝。

IMO你最好的選擇是使用Executor框架。 這使得處理並發變得更加容易。

這里有幾個 教程可以幫助您入門。

您的代碼在諸如Tomcat之類的Web容器中運行這一事實不應該讓您感到煩惱。 這意味着處理請求的實際線程實際上是一個工作線程,取自應用服務器本身管理的線程池。 但是,只要你自己的線程干凈地完成它們的工作(即只修改限制在這個實際請求中的數據並且不干擾其他外部線程),並且它們同時沒有太多,所以應該沒事的。

Tomcat 7支持Servlet 3.0及其異步servlet - 它維護自己的線程池並提供標准API以在單獨的線程中執行請求。 您可以在此處查看示例: Tomcat 7中的異步Servlet

如果創建處理器(P)很昂貴,您是否可以預先創建P實例池並重新使用它們,就像創建數據庫連接池一樣?

Apache Commons Pool項目可以為您提供一個起點。

暫無
暫無

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

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