我有這個問題。Java:以指定的時間間隔執行方法
如果可能的話,我需要有一個重複不斷的方法,但不會超載系統。
據我所知,while(true){... code ...}會掛起系統。
你會建議我使用哪些不會掛起系統的東西?
感謝
另外: 一個我的方法可能需要長達5分鐘,或50毫秒的執行,我想方法,當它完成
我有這個問題。Java:以指定的時間間隔執行方法
如果可能的話,我需要有一個重複不斷的方法,但不會超載系統。
據我所知,while(true){... code ...}會掛起系統。
你會建議我使用哪些不會掛起系統的東西?
感謝
另外: 一個我的方法可能需要長達5分鐘,或50毫秒的執行,我想方法,當它完成
你可以開始一個新的線程並在後臺運行任務。有關更多信息,請參閱Java concurrency教程。
如果您只想一次爲此任務運行1個線程,則可以使用single thread executor。
看看Timer和TimerTask。他們正是你需要的。
編輯: 仍然你需要什麼。看看API的
但是,當一個時間任務未完成時(例如,需要大約5分鐘才能完成),似乎會創建一個新線程。我不希望它創建一個新線程,我只希望它在方法完成時執行此操作。 – Andrey 2009-12-29 04:13:07
恐怕您沒有太多選項。如果有另一種方式,我很樂意聽到它。最好有一個單獨的定時器調度線程滿足您的所有需求(而不是在單獨的線程上運行您的任務),以儘量減少線程數量。 – 2009-12-29 04:15:28
如果您希望在第一次完成後立即開始新的重複,則不需要調度程序,並在同一個線程上執行。 「雖然(真)」正是這樣做的方式,如果這實際上是你想要的。
您對「掛起系統」的擔憂表明,在程序中的其他線程上發生了其他事情,您希望允許發生這種情況,或者希望在某種情況下結束這個序列, t指定
在第二種情況下,您需要在while循環中測試終止條件而不是「while true」(或使用「break」)。在第一種情況下,您需要確保其他線程能夠訪問CPU。調用
Thread.currentThread().yield();
對於每次迭代可能是確保其他線程獲得一個最簡單的方法機會執行。
我可以用while(true){...}代碼開始一個新線程,它不會影響主程序(不會掛起它)嗎? – Andrey 2009-12-29 04:14:34
是的,它不會掛起它 - 新線程與主線程同時運行。你開始新的線程,它會運行直到它自己完成,或者直到你的主線程停止它。 – 2009-12-29 04:17:30
我應該開始什麼樣的線程?你能告訴我一小段代碼嗎 – Andrey 2009-12-29 04:21:18