它是否比使用String等锁定提供任何好处?
private Object lock = new Object();
private String lock = new String();
答案 0 :(得分:6)
任何课程都可以。使用Object
是有意义的,因为它是您可以创建的最小和最简单的对象。其他任何事情都会“太多”。
答案 1 :(得分:3)
就像其他人所说的那样,对你的锁使用String或Object之间真的没什么区别,尽管有些人会说一个人比另一个更“浪费”内存。如果您正在寻找一些良好的同步“原语”,那么值得看一下Java Concurrency packages,实际上是一个Lock对象,它有很多有用的方法可以利用。
答案 2 :(得分:3)
通常,您不希望将String对象用作同步锁。原因是JVM可以通过实习来优化用于存储字符串的内存,因为字符串是不可变的。这可能会导致系统中不相关的部分“共享”从未打算共享的锁。这可以表现为简单的非最佳性能,或者在最坏的情况下,来自竞争条件的死锁,在没有调试器的情况下是非显而易见的。
这也适用于优化的其他Object原语等效项,如Integer,Long和Boolean。您不希望将它们用作锁,例如,所有值为true的布尔对象实际上都可以引用同一个Boolean.TRUE实例。
此问题将在下面的链接中进一步解释。
答案 3 :(得分:1)
不,不。只是你明确地说它只是一个没有其他意义的对象而不是用于锁定 - 而String是一个字符串,而一个空字符串仍然是一个有意义的实体。
答案 4 :(得分:1)
任何对象都同样适用。