我在 Java 的基本同步/等待中实现了一个典型的条件变量:
ConcurrentHashMap incompleted = ...;
// the notifier
incompleted.remove(key);
synchronized (this) {
if (incompleted.isEmpty()) {
notifyAll();
}
}
// the waiter
synchronized (this) { // one this object for each request
while (!incompleted.isEmpty()) {
wait(10000L); // this is exact time out pass in
}
// done and exit
}
这些代码看起来非常典型并且有效。但是,当我测试许多(比如 100 个)并发请求时,CPU 负载约为 80%,而分析器报告应用程序在 wait() 方法中花费的时间为 80%。通常高 cpu 可能是由于在应用程序代码中忙于等待。但是为什么 wait() 本身会一直花费呢?谢谢
该主机是 VMware 主机,运行 Oracle JVM 1.6。