Summary
-------
`ThreadPoolExecutor.finalize()` was (re)specified to do nothing in JDK 11. All finalize methods (along with the finalization mechanism itself) were [deprecated for removal][1] with JEP 421 in JDK 18.
Problem
-------
The vestigial `ThreadPoolExecutor.finalize()` method serves no purpose, and recently caused a minor annoyance in test code ([JDK-8371682][2]).
Solution
--------
The finalizer in `ThreadPoolExecutor` should be removed.
There is a small risk that there are existing subclasses of `ThreadPoolExecutor` that override `finalize()` to call `super.finalize()`. Such classes would no longer compile (due to the mismatch between `Object.finalize()` throwing `Throwable`, and `ThreadPoolExecutor.finalize()` not throwing an exception). A Corpus search did not find any such subclass.
Specification
-------------
The spec change is best viewed in the attached specdiff, as the method spec is generated from verbiage inherited from `Object.finalize()`, plus local `@implNote`.
[1]: https://bugs.openjdk.org/browse/JDK-8276447
[2]: https://bugs.openjdk.org/browse/JDK-8371682