簡體   English   中英

如何找出一個線程處於等待狀態的時間

[英]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 (除非你自己制作LockCondition實現..),我建議盡可能簡單。

我想你的線程(包括消費者和供應商)都有這樣的代碼:

while (conditionForWaiting) {
    condition.await()
}

這樣,您可以在進入while循環之前添加System.currentTimeMillis()的時間戳(如果conditionForWaiting為true!)。 然后,只需打印(System.currentTimeMillis()-startTime)/1000即可打印線程等待的秒數。 或者將它保存到一個領域並擁有一個吸氣劑,無論你想用它做什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM