如何找出一个线程处于等待状态的时间

时间:2013-04-06 22:36:27

标签: java

简短版本:在java中,有没有办法找出一个线程处于等待状态的时间长度?如果相关,我所引用的对象将通过调用condition.await()进入等待状态。

长版:(这是作业问题)

我正在开发一个程序,该程序可以创建10个供应商线程和10个消费者线程,并具有同步的通用“会议室”。供应商线程稍微休眠,产生随机数,并且(如果会议室的数据字段为空),将随机数放在该字段中,并将其标记为具有相同ID的消费者线程。如果数据字段不为空,则它们在占用条件下await。消费者线程检查会议室中的数据是否标记为他们:如果没有,他们{error}条件await。如果是这样,他们 它们将数字存储在数据字段中,将其设置为空并调用Occupied.signalAll()以通知供应商线程数据字段现在为空。 (供应商线程调用wrongID.signalAll()通知消费者线程新数据在该字段中。)

我有几个诊断println语句(供应商0进入会议室,离开数据/供应商1进入等候室......),一切似乎都正常。我还想在线程唤醒时打印语句,显示它们处于等待状态的时间。这可能吗?

此外,如果有人在我的逻辑中发现任何缺陷,请随时向我指出(这是我第一次尝试多线程)

1 个答案:

答案 0 :(得分:1)

由于您无法覆盖wait()final}或Condition(除非您自己制作LockCondition ..),我建议尽可能简单。

我想你的线程(包括消费者和供应商)都有这样的代码:

while (conditionForWaiting) {
    condition.await()
}

这样,您可以在进入while循环之前添加System.currentTimeMillis()的时间戳(如果conditionForWaiting为真!)。然后,只需打印(System.currentTimeMillis()-startTime)/1000即可打印线程等待的秒数。或者将它保存到一个领域并拥有一个吸气剂,无论你想用它做什么。