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有同样的问题)


为什么是反模式?

或者换句话说:


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

最佳答案

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

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