可以创建多少 java 个信号量实例?

How many java semaphores instances can be created?

我正在使用信号量向生产者线程发出信号,表明另一个(消费者)线程已完成共享 data/object 处理。但是我可以创建的信号量实例总量是否有限制?我想了解一下,对大量(数十万)个对象使用这样的同步是否可以? 请注意,这是另一个问题 - 不是关于“信号量可以拥有的最大许可数量是多少”,所以 ity 不是重复的。 谢谢

未定义您可以在 Java 中创建多少个对象实例。这取决于可用内存。 Semaphore 的实现方式未定义。如果您的平台施加限制,它可能高于您建议的数十万。

你当然可以试试看!编写一个只分配信号量并将它们放入 ArrayList 的存根程序(以避免它们被垃圾收集),看看会发生什么。

在大多数环境中,成百上千不是一个 'scary' 的数字,但是管理对象数量的方法非常简单。例如,'lazy initialisation'。在第一次获取时分配一个 Semaphore(如果进行计数则释放)并在它达到零时将引用清零是一种潜在的策略,如果您需要大量 'logical' 信号量实际上很少有 non-default(例如零)数量的流通许可证。