@Override
  protected LockState acquireLock(MasterProcedureEnv env) {
    // AbstractStateMachineTableProcedure acquires exclusive table lock by default,
    // but we may need to downgrade it to shared lock for some reasons:
    // a. exclusive lock has a negative effect on assigning region. See HBASE-21480 for details.
    // b. we want to support taking multiple different snapshots on same table on the same time.
    if (env.getProcedureScheduler().waitTableSharedLock(this, getTableName())) {
      return LockState.LOCK_EVENT_WAIT;
    }
    return LockState.LOCK_ACQUIRED;
  }
A procedure used to take snapshot on tables.
hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/SnapshotProcedure.java