【发布时间】:2013-09-06 18:06:23
【问题描述】:
我知道在 Java 中,要确保每个线程一次只运行一段代码,只需使用 synchronized 关键字。即,
synchronized (getClass()) {
// expensive work
}
但是,我宁愿只在有足够 RAM 可用的情况下执行昂贵的工作。即,假设我有 10 个线程在运行,并且在代码的 expensive work 部分中,它占用了 50 MB 的 RAM。假设我根据 JVM 可以使用的最大内存进行计算,并意识到我可以安全地同时运行 5 个线程。
那么,我如何正确使用Locks 或Concurrency 或.wait()/.notify() 来确保expensive work 仅运行该设定次数?
我希望我的问题是有道理的。我研究了Locks 和ReentrantLock,但实际上我发现这个例子不起作用。在他们的示例中,似乎每个单独的线程都创建了一个 lock 的实例,而在我的情况下,我有多个单独的、独立的线程同时运行并且它们彼此不知道。
谁能举个例子,或者给出一个例子的链接,你使用并发/锁来满足这个场景?
我需要该解决方案与 Java 6 兼容。
【问题讨论】:
标签: java multithreading concurrency synchronization locking