簡體   English   中英

Java EE中的長壽命線程

[英]Long living threads in Java EE

我需要編寫具有這些特征的Java系統。

-系統啟動時,需要創建一些在系統運行時需要永久​​存在的對象。 同樣在對象的構造函數上,將創建新線程,並且這些線程也需要在系統運行時運行。

-系統需要公開將使用啟動時創建的對象的Web服務。

為了給出我需要做什么的上下文,我需要編寫一個應用程序代碼,使其在啟動時創建一些負責執行輪詢任務的對象。 我還需要一個使用這些對象來處理其請求的Web服務。

如何在Java中實現這些功能? 我當時考慮使用Java EE來實現Web服務,也因為我打算實現一個使用Web服務的Web界面。 但是,我的大問題是,如何在Java EE中實現自應用程序啟動以來永久存在的線程?

如果您確實不需要Application Server,則可以在J2SE環境中提供Web服務 對於線程問題,您可能需要看一下Executor框架,利用該框架可以輕松地通過線程池備份線程,並計划Runnable定期進行工作(例如每5秒鍾一次)。 但是,這通常與Java EE容器不能很好地結合使用,因為不鼓勵自己生成線程。

您可以編寫一個實現Thread的類,然后在Singleton范圍內從該類創建一個對象,只要系統正在運行,它就將一直存在。 Spring是實現此目標的絕佳框架。

http://static.springsource.org/spring/docs/3.0.x/reference/beans.html#beans-factory-scopes-singleton

如果要使用Java EE,則應考慮使用EJB Timer Service

您可以使用Spring Timer任務來維護您的輪詢功能。 宣告spring timer任務很容易-

<bean id="scheduledTask" class="org.springframework.scheduling.timer.ScheduledTimerTask">
  <!-- wait 10 seconds before starting repeated execution -->
  <property name="delay" value="10000"/>
  <!-- run every 50 seconds -->
  <property name="period" value="50000"/>
  <property name="timerTask" ref="sendEmail"/>
</bean>
<bean id="sendEmail" class="examples.CheckEmailAddress">
  <property name="emailAddresses">
    <list>
      <value>jdoe@test.test</value>
     </list>
  </property>
</bean>

在這里,您要在啟動時初始化的任何對象都可以定義為Spring Singleton Bean。 這應該解決您的目的,而無需太多復雜的編碼。

暫無
暫無

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

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