gpt4 book ai didi

java - 如何找出线程处于等待状态的时间

转载 作者:搜寻专家 更新时间:2023-11-01 03:40:28 25 4
gpt4 key购买 nike

精简版:在java中,有没有办法知道线程处于等待状态的时间?如果相关,我所指的对象将通过调用 condition.await() 进入等待状态。

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

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

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

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

最佳答案

因为您不能覆盖 wait()(它是 final)或 Condition(除非您制作自己的 LockCondition 实现..),我建议尽可能简单。

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

while (conditionForWaiting) {
condition.await()
}

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

关于java - 如何找出线程处于等待状态的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15856816/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com