2015-09-10 87 views
2

我建立運行1000(及以上)客戶端模擬器,在每個客戶端,我想X時間後運行任務線程運行計時器,我試圖TimerTask,問題是,在每個任務(超過1000)新的線程被創建。不需要在Java

難道那裏沒有任何線程任務計時器?

+0

有多少任務正在運行的每個客戶端? 你能分享這個代碼片段嗎? – robin

+1

你不能用'只是調用的主要任務部分之前'的Thread.sleep(X * 1000)? – learningloop

回答

4

您可以安排使用一個定時器多TimerTasks,他們不能在同一時間運行。根據你的需要,這可能是夠好的。

但是,引用的Timer的Javadoc:

爪哇5.0引入的java.util.concurrent包和的併發工具一個在其中是ScheduledThreadPoolExecutor其是用於在給定速率或延遲反覆執行任務的線程池。它實際上是Timer/TimerTask組合的更多功能的替代品,因爲它允許多個服務線程,接受各種時間單位,並且不需要子類化TimerTask(僅實現Runnable)。使用一個線程配置ScheduledThreadPoolExecutor使其等效於Timer

0

如果你想模擬1000個(和更多)客戶端同時行事,你必須使用Thread s!否則,您將擁有一個單一的線程,其中您的確定邏輯指定何時完成什麼客戶端的邏輯 - 這實際上並不模擬並行執行的客戶端。

+0

@Andreas接縫的答案是相當有幫助的,以儘量減少通過*共享*線程的數量由一個線程池,但它不會改變我的想法,你必須直接或間接使用線程。 –