Java-广泛的信号量使用

Java-广泛的信号量使用,java,multithreading,concurrency,semaphore,Java,Multithreading,Concurrency,Semaphore,在我编写的服务器中,每个客户机处理程序对象都包含一个用于某些用途的信号量,由于可能有许多客户端处理程序—我想知道程序可以容纳的信号量数量是否有限制?java.util.concurrent.Semaphore是一个标准的java对象,因此与堆中的每个其他对象具有相同的限制。因此,只要有足够的内存,实例化更多信号量就不会有问题 我觉得奇怪的是,你需要这么大的数字,你甚至会思考这是否会导致问题。典型的并发程序只有少数几个关键部分必须由不同的信号量来保护,Java中的大多数数据结构都有线程安全的替代方

在我编写的服务器中,每个客户机处理程序对象都包含一个用于某些用途的信号量,由于可能有许多客户端处理程序—我想知道程序可以容纳的信号量数量是否有限制?

java.util.concurrent.Semaphore是一个标准的java对象,因此与堆中的每个其他对象具有相同的限制。因此,只要有足够的内存,实例化更多信号量就不会有问题

我觉得奇怪的是,你需要这么大的数字,你甚至会思考这是否会导致问题。典型的并发程序只有少数几个关键部分必须由不同的信号量来保护,Java中的大多数数据结构都有线程安全的替代方案,这使您的生活比手动同步它们容易得多。

Java.util.concurrent.Semaphore是标准的Java对象,因此具有与其他数据结构相同的限制堆中的其他对象。因此,只要有足够的内存,实例化更多信号量就不会有问题



我觉得奇怪的是,你需要这么大的数字,你甚至会思考这是否会导致问题。典型的并发程序只有少数几个关键部分必须由不同的信号量来保护,Java中的大多数数据结构都有线程安全的替代方案,这使您的生活比手动同步它们容易得多。

操作系统确实限制了用户可以创建的信号量实例的数量应用层。一旦达到此限制,就不能有更多线程处于等待状态。此数字特定于操作系统。这是

操作系统确实限制了应用层可以创建的信号量实例的数量。一旦达到此限制,就不能有更多线程处于等待状态。此数字特定于操作系统。这是

Java可能没有任何限制,但本机操作系统/硬件可能有。@Santosh如果正在创建信号量,但大多数信号量很少使用,该怎么办?操作系统对信号量实例的数量或在信号量上休眠的线程的数量有限制吗?操作系统对信号量的数量有限制无法创建的信号量对象的数量,超过该数量,线程将无法处于等待状态。请查看此内容。@Santosh谢谢-是否愿意将其作为答案发布,以便我能够接受?Java可能没有任何限制,但本机操作系统/硬件可能有。@Santosh如果正在创建信号量,但大多数信号量很少使用,那么操作系统对信号量实例的数量或数量有限制吗正在信号灯上休眠的线程?操作系统确实对要创建的信号灯对象的数量设置了限制,超过该限制,线程就不能处于等待状态。看看这个。@Santosh谢谢-是否愿意将其作为答案发布,以便我能够接受?大多数情况下,信号量未被使用,但客户端处理程序在创建时仍将分配一个信号量,因为有一个特殊操作必须在互斥体中执行?您考虑过进行该特殊操作吗synchronized?synchronized-除了提供互斥外,还通过使本地cpu缓存无效来修复本地线程内存可见性问题,因为我的操作没有这个问题,使用synchronize(同步)并使本地cpu缓存无效是一种开销。大多数情况下,信号量未被使用,但客户端处理程序在创建时仍将分配一个信号量,因为必须在Mutex中执行特殊操作。是否考虑使该特殊操作同步?synchronized-除了提供互斥外,还可以通过使本地cpu缓存无效来修复本地线程内存可见性问题,因为我的操作没有这个问题,因此使用同步使本地cpu缓存无效会带来一些开销。OS信号量和java.util.Semaphore之间存在差异。虽然在操作系统级别上对信号量的数量有限制,但java.util.Semaphore在不使用时不会阻塞除某些内存之外的任何系统资源,即它是POJO wrt。特殊OS-Resources.OS信号量和java.util.Semaphore之间存在差异。虽然在操作系统级别上对信号量的数量有限制,但java.util.Semaphore在不使用时不会阻塞除某些内存之外的任何系统资源,即它是POJO wrt。特殊资源。