我在使用 OpenCMS 时遇到稳定性问题。当我进行线程转储时,许多线程(400)正在synchronized (m_processingFiles)
以下代码中的块上等待:
public class CmsJspLoader ... {
...
private static Set m_processingFiles = Collections.synchronizedSet(new HashSet());
...
...
...
public String updateJsp(...) {
....
while (m_processingFiles.contains(jspVfsName)) {
// wait a little bit until the first thread finishes
try {
synchronized (m_processingFiles) {
m_processingFiles.wait(100);
}
} catch (InterruptedException e) {
// ignore
}
}
...
}
...
}
该代码是 OpenCMS 的一部分。代码中没有notify()
任何地方。显示的块内没有状态变化或读取共享变量。sync
但是,有 400 个线程在等待,也就是说,sync
最后一个线程要等待 40 秒!!!
我根本不明白它的目的。有什么我没看到的吗?