【发布时间】:2011-05-03 09:14:34
【问题描述】:
假设我有一个包含数千个对象的数组,以及可能访问每个对象的少量线程。我想保护对其中一种对象方法的访问。最简单的方法是将该方法声明为synchronized。但是,这可能会导致创建数千个监视器,无论它们以何种方式实现。如果这是 Win32,我永远不会创建数以千计的内核对象,例如 Mutex,但 CRITICAL_SECTIONs 可能是合理的。我想知道Java中的情况是什么。鉴于争用的可能性很低,使用监视器会比它们所需的绝对内存量更多吗?在 Java 中使用这种低粒度同步的做法有多普遍?
(显然有一些解决方法,例如使用更小的同步对象数组,这些对象将使用一些哈希进行访问。我不是在寻找实用的解决方案,而是在寻找洞察力)。
【问题讨论】:
-
Java 对象带有内置的轻量级锁。无论您是否锁定对象,都会使用此内存。简而言之,Java 被设计和优化为支持每个对象的锁定。
标签: java performance synchronization monitor