docs: public void removeTarget(Object key) throws MatchingException
    {
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        SibTr.entry(tc,
                    "removeTarget",
                    new Object[]{key});
      // Remove from the HashMap, with synch, there may be other accessors
      synchronized(_targets)
      {
        Target targ = (Target) _targets.get(key);
        if (targ == null)
          throw new MatchingException();
        for (int i = 0; i < targ.targets.length; i++)
          _matchSpace.removeTarget(targ.expr[i], targ.targets[i]);
  
        // Now remove the Target from the cache
        _targets.remove(key);
  
        // Remove from the Monitor state, with synch, there may be other accessors
        if(targ.targets.length > 0) // Defect 417084, check targets is non-empty
        {
          if(targ.targets[0] instanceof MonitoredConsumer)
            _consumerMonitoring.removeConsumer((MonitoredConsumer)targ.targets[0]);
        }
      }
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.exit(tc, "removeTarget");
    }