簡體   English   中英

在Servlet中使用線程

[英]using threads in servlets

我很困惑是否應該在servlet中創建自己的線程,因為它們在內部具有線程機制? 如果是,我們如何確定程序線程是否安全? 如何在servlet中實現線程安全機制。

您在問兩個不同的問題:

我很困惑是否應該在servlet中創建自己的線程,因為它們在內部具有線程機制?

通常,您不應在Java EE應用程序中啟動線程。 如果需要單獨的線程,請確保使用應用程序知道的調度程序服務,以便在應用程序關閉時有機會關閉線程。 石英是大多數時候使用的東西。

如果是,我們如何確定程序線程是否安全? 如何在servlet中實現線程安全機制。

Servlet就像其他任何Java類一樣。 查找有關線程安全的教程,或在實踐中閱讀Java並發

我也有類似的擔憂。

EJB規范不允許從應用程序創建線程。

可以從Servlet啟動線程。
我已經做過很多次了,沒有任何問題,但是老實說,我不確定100%:

  • 容器允許這樣做違反了標准

要么

  • 所有容器都允許使用。

但是在Tomcat中,從servlet啟動線程從來沒有問題。

您可以像在每個多線程程序中一樣,使它成為線程安全的。

您將使用Java提供的所有可用結構進行同步。

根據您在注釋中的內容,我了解到您有一組線程可以連續監視日志文件,並在日志中發現有問題時發送電子郵件。

第一個問題:為什么這是一個servlet? 是否有網絡GUI? 這是做什么用的?

對於日志掃描部分,我將其實現為servlet容器之外的單獨過程。 對於此過程發現的所有需要​​發送到某個地方的東西,我都會向JMS隊列中添加一條消息。 然后,我將創建一個消息驅動的bean,以接收來自此隊列的消息並將其作為電子郵件發送。 (這確實是一個集成問題,要將消息從JMS轉換為電子郵件,您可能需要研究像Mule這樣的解決方案)。

至於如何將此與您的servlet集成,除了掃描日志外,還取決於您的servlet所做的工作(我想它為用戶提供了某種界面)

通過這種設計,您可以選擇將來重新編寫生成日志的程序。 除了讓一個程序編寫日志並由另一個程序解析日志外,第一個程序還可以將中斷消息直接放在JMS隊列上。 換句話說,您將來可以更改體系結構的日志生成部分,而不必重新編寫郵件發送部分。

暫無
暫無

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

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