[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-core-libs-dev
Subject:    Re: RFR: 8290036: Define and specify Runtime shutdown sequence [v7]
From:       Alan Bateman <alanb () openjdk ! org>
Date:       2022-08-29 8:23:27
Message-ID: 5dksriRuuZ4zEr_XQTk9zVcJ2Y77KoX9POg8H40IMtI=.b5e1ea74-dfb0-413a-b731-47f7d7106351 () github ! com
[Download RAW message or body]

On Sun, 28 Aug 2022 22:20:03 GMT, David Holmes <dholmes@openjdk.org> wrote:

> > src/java.base/share/classes/java/lang/Thread.java line 70:
> > 
> > > 68:  * The newly started thread invokes the task's {@link Runnable#run() run} \
> > >                 method.
> > > 69:  *
> > > 70:  * <p> A platform thread <i>terminates</i> if either its {@code run} method \
> > > completes
> > 
> > I don't think the update in 9796557d works. It switches to talking about the \
> > termination of platform threads before we've introduced what a platform thread \
> > is. It also switches to talking about the Thread.run method when the focus in the \
> > previous paragraph has been the the task that the thread executes. If we really \
> > need this here then the second paragraph will need to explain that it is also \
> > possible to extend Thread and override the run method.
> 
> I don't think we need to distinguish between platform and virtual threads here at \
> all. Isn't it the case that virtual threads also have a run() method and they too \
> terminate when run() completes as described (together with UEH)? The fact most \
> Thread run() methods call something else's run() method is immaterial. We don't \
> know what a run() method will do, but whatever it is once it completes then the \
> thread has terminated.

There are subtle differences (invoking a virtual Thread's run method directly does no \
nothing) but that is too much detail and would confusing to say anything about in the \
introduction paragraphs.

The following is closer to what I think we should have. The existing paragraph 2 \
describes starting a thread so this is where the Thread.run method is introduced. \
Paragraph 3 follows to describe termination.


 * <p> {@code Thread} defines constructors and a {@link Builder} to create threads.
 * {@linkplain #start() Starting} a thread schedules the newly started thread to \
                execute
 * its {@link #run() run} method. The thread executes concurrently with the thread \
                that
 * caused it to start.
 *
 * <p> A thread <i>terminates</i> if either its {@code run} method completes \
                normally,
 * or if its {@code run} method completes abruptly and the appropriate {@linkplain
 * Thread.UncaughtExceptionHandler uncaught exception handler} completes normally or
 * abruptly. With no code left to run, the thread has completed execution. Thread
 * defines the {@link #join() join} method to wait for a thread to terminate.

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

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


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic