[英]Is it possible to find out how long another app has been running? Android
[英]How to find out how long a thread has been in the wait state
簡短版本:在java中,有沒有辦法找出一個線程處於等待狀態的時間長度? 如果相關,則通過調用condition.await()
將我所引用的對象發送到等待狀態。
長版:(這是作業問題)
我正在開發一個程序,可以創建10個供應商線程和10個消費者線程,並具有同步的通用“會議室”。 供應商線程稍微休眠,產生隨機數,並且(如果會議室的數據字段為空),將隨機數放在該字段中,並將其標記為具有相同ID的消費者線程。 如果數據字段不為空,則await
處於占用狀態。 消費者線程檢查會議室中的數據是否標記為:如果沒有,則await
的ID條件。 如果是這樣,他們將數字存儲在數據字段中,將其設置為null並調用Occupied.signalAll()
以通知供應商線程數據字段現在為空。 (供應商線程調用wrongID.signalAll()
來通知消費者線程新數據在該字段中)。
我有幾個診斷println
語句(供應商0進入會議室,離開數據/供應商1進入等候室......),一切似乎都運行正常。 我還想在線程喚醒時打印語句,顯示它們處於等待狀態的時間。 這可能嗎?
此外,如果有人在我的邏輯中看到任何缺陷,請隨時向我指出(這是我第一次嘗試多線程)
因為你不能覆蓋wait()
(它是final
)或Condition
(除非你自己制作Lock
和Condition
實現..),我建議盡可能簡單。
我想你的線程(包括消費者和供應商)都有這樣的代碼:
while (conditionForWaiting) {
condition.await()
}
這樣,您可以在進入while循環之前添加System.currentTimeMillis()
的時間戳(如果conditionForWaiting
為true!)。 然后,只需打印(System.currentTimeMillis()-startTime)/1000
即可打印線程等待的秒數。 或者將它保存到一個領域並擁有一個吸氣劑,無論你想用它做什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.