Java监视器有多重?
假设我有一个包含数千个对象的数组,以及可能访问每个对象的少量线程。我想保护对其中一个对象方法的访问。最简单的方法是将该方法声明为 。但是,这可能会导致创建数千个监视器,无论它们以何种方式实现。如果这是Win32,我永远不会创建数千个内核对象,如Mutex,但CRITICAL_SECTIONs可能是合理的。我想知道Java中的情况如何。鉴于争用的可能性很低,使用监视器是否会施加超过它们所需的内存量?在Java中使用这种低粒度同步的做法有多普遍?synchronized
(显然有一些解决方法,例如使用更小的同步对象数组,这些对象将使用一些哈希进行访问。我不是在寻找一个实用的解决方案,我正在寻找一个洞察力)。