java - "Every object being available for locking"是反模式吗?

标签 java

<分区>

偶然发现这个问题的公认答案:https://stackoverflow.com/questions/186964/java-core-api-anti-patterns-what-is-wrong/891589#891589提到:

Every object being available for locking instead of specific lock objects(.NET has the same problem)

为什么它是反模式?

换句话说:

  • 如何证明语句中存在反模式?
  • 如何证明语句中没有反模式?

最佳答案

我不知道那个人的确切意思,但一个副作用是你可以这样写:

private final String s = "mutex";
private void m1() { synchronized(s) {} }

private final Boolean b = Boolean.FALSE;
private void m2() { synchronized(b) {} }

看起来这些方法使用的是私有(private)非共享锁。但是字符串是 intern 的,所以使用“mutex”作为互斥量的另一个代码实际上会使用相同的锁,这很容易导致死锁。同样,Boolean.FALSE 可以从导致相同问题的外来代码访问。

另请参阅:Problem with synchronizing on String objects?

关于java - "Every object being available for locking"是反模式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20931882/

相关文章:

java - 为什么这个 HashSet 代码片段会这样?

java - 使用for循环反转Java中的整数

java - 在 Java 8 中收集流的元素并将其中一些元素减少为结果集合中的单个元素

java - 如何将调用对象方法的 JSP servlet 转换为 JSTL?

java - JSTL 无法解析双变量乘以整型变量?

java - 如何对 List<Integer> 进行排序?

java - 如何将流收集到 TreeMap 中

java - 并行流和核心数

java - 使用Spring 3.0的 session 不活动弹出警告

java - 我的 ProcessBuilder 代码不起作用。从该程序运行 craftbukkit