2012-07-18 127 views
1

我需要創建一個線程來偵聽新文件路徑,修改或刪除的文件。我正在使用一個使用Spring 3,Struts 2和Hibernate 3的Web應用程序。如果我運行該項目,它會加載包含文本「Hello World」的index.jsp。Java Web應用程序中的線程

的問題是,當我創建一個Java Thread()偵聽到的文件路徑,並將其分配到的index.jsp:

<action name="" method="runThread" class="TestThreadBean"> 
    <result>index.jsp</result> 
</action> 

然後「Hello World」文本未出現過因爲線程不永遠停止(這是對的,它不應該停止)。我需要此線程在後臺運行,而不會干擾其他Web應用程序。雖然我不想爲此線程創建單獨的Web應用程序。另外,我不希望每創建一個new會話實例時都創建一個new線程實例,不管有多少個會話實例處於活動狀態,應只有一個線程實例。

+0

請更具體 – NiranjanBhat 2012-07-18 11:41:16

+2

你其實並不需要做什麼特別的Tomcat中運行的線程。你可以像往常一樣使用'new Thread'或'Executor'來創建它們。這不符合J2EE規範,但事實是它可以工作。以符合規範的方式執行此操作並不容易,特別是在實現servlet規範的容器中,而不是J2EE的其餘部分。 – 2012-07-18 11:42:58

+0

「客戶端」究竟是什麼意思? – 2012-07-18 14:43:40

回答

7

基本上,人們會建議不要在容器管理的應用程序中啓動自己的線程,如Web應用程序或企業(EJB)應用程序。

這是因爲在容器環境中,包括線程在內的所有資源都應該由容器管理。但恕我直言,如果你知道影響,以及我們自己的線程及其資源的生命週期,比如用事務等包裝這個線程,那麼我們可以使用標準方式創建一個線程(new Thread()),但這只是我的看法。

我建議你在做出決定之前先通過'容器管理線程'。您可以參考commonJ一次獲取Container的線程池的句柄,但由於這不是標準或未在容器規範中提及,因此它可能不適用於所有容器。這將爲工作:

+0

@ ThreaT提供commonJ鏈接中的一個。 – Carlo 2012-07-18 12:14:45

+0

@ThreaT爲什麼服務器端線程應該知道客戶端? – Carlo 2012-07-18 12:21:29

+0

所以,也許你需要安排一項活動,而一項工作並不是你要找的。 – Carlo 2012-07-18 12:24:39