RFR: 8289610: Degrade Thread.stop [v4]

Alan Bateman alanb at openjdk.org
Sat Sep 17 08:41:19 UTC 2022


> Degrade Thread.stop to throw UOE unconditionally, deprecate ThreadDeath for removal, and remove the remaining special handling of ThreadDeath from the JDK.
> 
> Thread.stop is inherently unsafe and has been deprecated since JDK 1.2 (1998) with a link to a supplementary page that explains the rationale. Some of the API surface has already been degraded or removed: Thread.stop(Throwable) was degraded to throw UOE in Java 8 and removed in Java 11, and ThreadGroup.stop was degraded to throw UOE in Java 19. As of Java 19, the no-arg Thread.stop continues to work as before for platform threads but throws UOE for virtual threads. The next step in the glacial pace removal is the degrading of the no-arg Thread.stop method to throw UOE for all threads.
> 
> To keep things manageable, the change proposed here leaves JVM_StopThread in place. A separate issue will remove it and do other cleanup/removal in the VM. We have another JBS issue for the updates to the JLS and JVMS where asynchronous exceptions are defined. There is also some remaining work on a test class used by 6 jshell tests - if they aren't done in time then we will temporarily exclude them.
> 
> The change here has no  impact on the debugger APIs (JVM TI StopThread, JDWP ThreadReference/Stop, and JDI ThreadReference.stop). Debuggers can continue to cause threads to throw an asynchronous exception, as might be done when simulating code throwing an exception at some point in the code.

Alan Bateman has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains 12 additional commits since the last revision:

 - Merge
 - Updates to Java Thread Primitive Deprecation page
 - Repalce "it" with "victim thread"
 - Merge
 - Revert test/langtools/ProblemList.txt as jshell tests no longer rely on Thread.stop
 - become -> became in javadoc
 - Merge
 - Remove stopThread permission from RuntimePermission table, exclude jshell tests
 - Deprecate for removal
 - Next iteration, update dates in headers
 - ... and 2 more: https://git.openjdk.org/jdk/compare/214db2f4...93806f99

-------------

Changes:
  - all: https://git.openjdk.org/jdk/pull/10230/files
  - new: https://git.openjdk.org/jdk/pull/10230/files/a00f38a2..93806f99

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=10230&range=03
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=10230&range=02-03

  Stats: 5663 lines in 389 files changed: 1218 ins; 1745 del; 2700 mod
  Patch: https://git.openjdk.org/jdk/pull/10230.diff
  Fetch: git fetch https://git.openjdk.org/jdk pull/10230/head:pull/10230

PR: https://git.openjdk.org/jdk/pull/10230


More information about the serviceability-dev mailing list