我需要創建一個線程,作爲一個獨立的進程無限地運行Spring MVC控制器。安排無限線程
當控制器第一次被擊中時,線程將開始。每次控制器被擊中時我都不想重新安排時間。
@RequestMapping(method = RequestMethod.GET)
public String runTask() {
//I want this to be scheduled first time controller is hit but
//I don't want it to rechadule every time it is hit again
ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor();
exec.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
// do stuff
}
}, 0, 5, TimeUnit.SECONDS);
return "Task was scheduled to run";
}
有沒有更好的方式來做到這一點?
這會在構造函數初始化時執行,而不是在第一次命中時執行。它可能工作,如果控制器懶惰初始化。 –
好吧,那麼保持布爾變量isExecutorStarted並在第一次命中後使其成爲true。 –
我想不出比給出細節更好的方法。 –