安全地使用 Java 映射作为互斥量持有者

Using a Java map safely as mutex holder

要求是,方法 A 中的相关代码不能在具有相同 class 的任何对象上并行执行。

下面的伪代码可以吗?

 private final Map<String, Object> simpleMutex = new HashMap<>();
 
 public void A( final Object o)
  {
    final ThreadLocal<Object> myLock = new ThreadLocal<>();
    synchronized ( simpleMutex )
    {
      myLock.set( simpleMutex.computeIfAbsent( o.getClass().getName(), className-> new Object() ) );
    }

    synchronized ( myLock.get() )
    {
      System.out.println("Executing A on " + o);
    }
  }
private final Map<Class<?>, Object> locksMap = new ConcurrentHashMap<>();

public void A(final Object o) {
     Object myLock = locksMap.computeIfAbsent(o.getClass(), className -> new Object());
     synchronized (myLock) {
          System.out.println("Executing A on " + o);
     }
}