On Wed, 8 Feb 2023 01:22:52 GMT, Sergey Bylokhov <[email protected]> wrote:

> > The specification isn't clear, and some parts somewhat contradict each 
> > other. Logically, the state should transition to `DONE` as soon as 
> > `doInBackground` completes. Then both done method and listeners are called 
> > when the state is `DONE` that is the background work is complete.
> 
> Which parts are contradicts?

This was a wrong statement. In fact, I referred to the problem that is being 
fixed here: `done` may be called before `doInBackground`.

https://github.com/openjdk/jdk/blob/0aeebee284effe9abd0ed3cf2845430b40bb53bd/src/java.desktop/share/classes/javax/swing/SwingWorker.java#L288-L293

The spec for `DONE` state does not specify when the transition occurs.

> I mean that the old implementation call DONE-listener last, as specified in 
> the header of the class what part of the spec mention different behavior?

Yes, this is how it's specified now.

> Above we discussed that it is possible to see a difference if the listener 
> will do some work on EDT, after the fix the listener will not be called last, 
> is that safe to assume it does not break something?

What kind of difference? Yes, you can observe the fact that now the 
`DONE`-state-listener is called before the `done` method.

In either case, the listener and the method are called when `get` does not 
block. The background job is finished when either of these events occurs.

I see no problem here.

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

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

Reply via email to