我有一個要求開始一個任務..現在有許多線程可以開始這項任務,這項任務通常需要4-5秒才能完成。如果此任務已由其他線程啓動,我想阻止該任務的啓動。 爲了實現這個要求,我想在某個線程啓動任務時,在另一個線程中啓動一個計時器或秒錶。現在,當定時器在配置的時間間隔後超時時,另一個線程可以啓動任務。 因此,在一個不同的線程中啓動一個計時器或秒錶,以查看是否已經達到了特定的時間是一個很好的解決方案?有沒有什麼好的選擇?關於秒錶或計時器或其他實用程序
回答
如果你正在嘗試在java中這樣做,那麼你可以考慮在JAVA上面向對象的方法使用一個同步塊。
所以,你想要確保的任務是一次由一個線程完成,然後在該類中創建一個類和一個同步方法,並確保所有線程共享同一個類的對象並調用此方法他們想要執行任務的方法。
對於實例
Class SyncTask{
synchronized void task1(){
//Perform your task here
}
}
您的應用程序的生命週期中一旦創建該類的對象,然後在所有線程使用同一個對象,讓他們把這種方法要執行的任務。
在多線程同時調用此方法的情況下。 JVM會處理這個序列,如果一個線程已經執行了一個任務,其他人調用它將等待第一個線程完成。
以這種方式,您將確保只有線程在任何給定時間執行任務。
我希望這會有所幫助。
如果我理解正確,這是一個壞主意。基本上,你假設你的工作永遠不會超過5秒鐘,所以如果手錶告訴你有些工作在不到5秒鐘前開始,那麼你將不會開始另一個工作。這是非常不可靠的。
而是創建某種標誌,您可以在作業開始時設置並在結束時取消設置。 AtomicBoolean
非常適合:
private AtomicBoolean flag = new AtomicBoolean();
//...
if(!flag.getAndSet(true)) {
try {
//do your work
} finally {
flag.set(false);
}
} else {
//Already running
}
如果你想高就等待前一個而不是簡單地被丟棄,只是圍繞着你的任務與或使用一些不同的鎖定機制。
注意:如果您的工作是分佈式的,您將需要一個分佈式鎖定機制,如數據庫或hazelcast。
我的任務是ping設備,如果設備不pinging,任務線程將在5秒鐘內超時。現在,我不想扼殺網絡以再次發送呼叫,以查看設備是否不pinging相反,我想在此設備的特定時間之後發送一個呼叫,以查看設備是否再次聯機。 –
@ashishgupta_mca:如果兩個線程在1秒內嘗試ping設備,第二個請求會發生什麼?是否應該放棄,是否應該等到第一次完成時,是否應該在第一次開始後等待至少5秒鐘(每5秒吞吐量保持最大1次請求)?根據您的要求,我們可以建議非常不同的最佳解決方案 –
- 1. 關於計時器實用程序
- 2. XMPP或Websocket或其他實時應用程序?
- 3. 使用perf或其他方式獲取C程序的運行時間(或其他統計信息)
- 4. 本機應用程序或PhoneGap或加速器或其他東西?
- 5. 開關箱或其他如
- 6. UISwitch或其他類似於相機應用程序開關的UIControl
- 7. 關於DC/OS馬拉松(或任何其他Java應用程序)的Apache Ignite
- 8. 不使用Tk創建一個秒錶(不是倒計時或計時器)python
- 9. 用chrome或其他webkit瀏覽器打開Cordova應用程序?
- 10. 休息服務連接(或其他)20秒後關閉嗎?
- 11. 計算月末或其最後一秒
- 12. PHP is_writeable或被其他程序打開?
- 13. 即使在應用程序關閉時也運行時鐘或計時器 - Android
- 14. 將BPS部署到Tomcat或其他應用程序服務器
- 15. 適用於WinForms和其他應用程序的通用計時器
- 16. 當其他應用程序打開或啓動時檢測到
- 17. 在PHP或其他Web應用程序中基於表單身份驗證(.NET)
- 18. 在windows phone7上啓動其他程序或應用程序
- 19. withCriteria「或」像其他表
- 20. 從一個表或其他
- 21. 「lcb_store_cmd_t」中的「exptime」單位是什麼?秒,毫秒或其他?
- 22. ViewPager或ViewFlipper或其他用於無限數據集的其他內容?
- 23. PHP不等於或其他不等於
- 24. WebSockets或Http哪一個用於實時應用程序?
- 25. Azure WebJob或調度程序或其他技術?
- 26. CI:Authorize.net(或其他?)
- 27. 時間以秒或毫秒
- 28. 秒錶和計時器
- 29. 格式實時秒錶計時器百分之一使用Swift
- 30. SQLite或coredata或其他
加入方法怎麼樣? – tibtof