It is well known that synchronization is recommended on a final private object (vs. synchronizing on this or even a protected data member).
But what happens when I have multiple classes (modules) in my application that need to synchronize on a common object?
Is there a way to reconcile these two seemingly contradicting requirements?
To better explain, if I have a private data member of class Owner defined as:
private final Object $01pfo = new Object[0]; 
Then any method in Owner could simply use it:
  protected void anyMethod()  {
    synchronized ($01pfo) {
          // do your thing
    }
  }
But if I want to synchronize on $01pfo from a different class (say User), is my only option to make $01pfo protected or public?
protected final Object $01pfo = new Object[0]; 
Is there a better approach? or solution?
 
     
     
     
    