Closed. This question is opinion-based。它当前不接受答案。
想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。
5年前关闭。
偶然发现此问题的可接受答案:https://stackoverflow.com/questions/186964/java-core-api-anti-patterns-what-is-wrong/891589#891589提到:
每个对象都可用于锁定而不是特定的锁定
对象(.NET有同样的问题)
为什么是反模式?
或者换句话说:
如何证明语句中有反模式?
如何证明语句中没有反模式?
这些方法似乎正在使用私有非共享锁。但是字符串是固定的,因此使用“互斥量”作为互斥量的另一个代码实际上将使用相同的锁,这很容易导致死锁。同样,可以从导致相同问题的外来代码访问Boolean.FALSE。
另请参阅:Problem with synchronizing on String objects?
想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。
5年前关闭。
偶然发现此问题的可接受答案:https://stackoverflow.com/questions/186964/java-core-api-anti-patterns-what-is-wrong/891589#891589提到:
每个对象都可用于锁定而不是特定的锁定
对象(.NET有同样的问题)
为什么是反模式?
或者换句话说:
如何证明语句中有反模式?
如何证明语句中没有反模式?
最佳答案
我不知道那个人的确切意思,但是副作用是您可以这样写:
private final String s = "mutex";
private void m1() { synchronized(s) {} }
private final Boolean b = Boolean.FALSE;
private void m2() { synchronized(b) {} }
这些方法似乎正在使用私有非共享锁。但是字符串是固定的,因此使用“互斥量”作为互斥量的另一个代码实际上将使用相同的锁,这很容易导致死锁。同样,可以从导致相同问题的外来代码访问Boolean.FALSE。
另请参阅:Problem with synchronizing on String objects?
关于java - “每个对象都可用于锁定”是否是反模式? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20931882/
10-10 03:10