简短版本:在java中,有没有办法找出一个线程处于等待状态的时间长度?如果相关,我所引用的对象将通过调用condition.await()
进入等待状态。
长版:(这是作业问题)
我正在开发一个程序,该程序可以创建10个供应商线程和10个消费者线程,并具有同步的通用“会议室”。供应商线程稍微休眠,产生随机数,并且(如果会议室的数据字段为空),将随机数放在该字段中,并将其标记为具有相同ID的消费者线程。如果数据字段不为空,则它们在占用条件下await
。消费者线程检查会议室中的数据是否标记为他们:如果没有,他们{error}条件await
。如果是这样,他们
它们将数字存储在数据字段中,将其设置为空并调用Occupied.signalAll()
以通知供应商线程数据字段现在为空。 (供应商线程调用wrongID.signalAll()
通知消费者线程新数据在该字段中。)
我有几个诊断println
语句(供应商0进入会议室,离开数据/供应商1进入等候室......),一切似乎都正常。我还想在线程唤醒时打印语句,显示它们处于等待状态的时间。这可能吗?
此外,如果有人在我的逻辑中发现任何缺陷,请随时向我指出(这是我第一次尝试多线程)
答案 0 :(得分:1)
由于您无法覆盖wait()
(final
}或Condition
(除非您自己制作Lock
和Condition
..),我建议尽可能简单。
我想你的线程(包括消费者和供应商)都有这样的代码:
while (conditionForWaiting) {
condition.await()
}
这样,您可以在进入while循环之前添加System.currentTimeMillis()
的时间戳(如果conditionForWaiting
为真!)。然后,只需打印(System.currentTimeMillis()-startTime)/1000
即可打印线程等待的秒数。或者将它保存到一个领域并拥有一个吸气剂,无论你想用它做什么。