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