【发布时间】:2024-01-22 02:59:01
【问题描述】:
我有一个被许多线程不断调用的方法,它在数据结构中查找数据。
当需要更新该数据结构时,我需要阻止所有尝试查找的线程,直到更新完成。
我可以使用带有 X 许可的信号量,并让 update 方法在执行更新之前获取所有 X 许可,然后再次释放它们 - 但现在 X 还用于将我的查找方法限制为 X 个同时调用的次要目的,我不想。
我还有哪些其他选项可以阻止对更新方法的调用而不限制它的同时执行?
【问题讨论】:
-
这可能与您当前的思路相反,但是限制同时调用您的方法的数量可能不一定是坏事。由于可用内存以及生成新线程所需的大量时间,您的机器无论如何都可以运行多少线程有实际限制 - 也许您可以将 X 设置为您肯定永远无法达到的大数字(
Integer.MAX_VALUE),或者在达到之前可能会导致处理效率问题的数字 (10*Runtime.getRuntime().availableProcessors())。这完全取决于该方法调用在做什么。
标签: java multithreading concurrency semaphore