During upstreaming ShenandoahTaskTermination and investigating inconsistent termination state reported by Thomas Schatzl, I believe we don't have to offer termination from every worker threads, since task termination should reach consistent state at then end, regardless it is normal or aborted termination (see JDK-8215047 for details).
That says, Shenandoah can dramatically simplify task termination logic, and eliminates ShenandoahCancelledTerminatorTerminator.
This work does not depend on fixing of JDK-8215047, because it does not reuse terminator.