4

简短版:在java中,有没有办法找出线程处于等待状态的时间?如果相关,我所指的对象会通过调用condition.await().

长版:(这是一道作业题)

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

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

另外,如果有人在这里看到我的逻辑中的任何缺陷,请随时向我指出(这是我第一次涉足多线程)

4

1 回答 1

1

由于您无法覆盖wait()(it's final) 或Condition(除非您自己制作LockCondition实现..),我建议您尽可能做最简单的事情。

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

while (conditionForWaiting) {
    condition.await()
}

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

于 2013-04-06T23:11:20.113 回答