Hi Martin,
On 9/02/2018 2:07 PM, Martin Buchholz wrote:
On Thu, Feb 8, 2018 at 7:39 PM, David Holmes <david.hol...@oracle.com
<mailto:david.hol...@oracle.com>> wrote:
On 9/02/2018 11:19 AM, Martin Buchholz wrote:
http://cr.openjdk.java.net/~martin/webrevs/jdk/jsr166-integration/overview.html
<http://cr.openjdk.java.net/~martin/webrevs/jdk/jsr166-integration/overview.html>
8190324: ThreadPoolExecutor should not specify a dependency on
finalization
http://cr.openjdk.java.net/~martin/webrevs/jdk/jsr166-integration/ThreadPoolExecutor-finalize/index.html
<http://cr.openjdk.java.net/~martin/webrevs/jdk/jsr166-integration/ThreadPoolExecutor-finalize/index.html>
https://bugs.openjdk.java.net/browse/JDK-8190324
<https://bugs.openjdk.java.net/browse/JDK-8190324>
Looks okay.
Another set of uninteresting changes, some suggested by intellij:
8195590: Miscellaneous changes imported from jsr166 CVS 2018-02
http://cr.openjdk.java.net/~martin/webrevs/jdk/jsr166-integration/miscellaneous/index.html
<http://cr.openjdk.java.net/~martin/webrevs/jdk/jsr166-integration/miscellaneous/index.html>
https://bugs.openjdk.java.net/browse/JDK-8195590
<https://bugs.openjdk.java.net/browse/JDK-8195590>
Hmmmm ... a summary of changes in the bug report would be nice.
Done.
I don't find the addition of reachability fences uninteresting
though. Why are they needed in those specific cases?
perhaps the standard should be for every method of a class with a
finalizer to have reachabilityFence(this) at the end?
Imagine
newSingleThreadExecutor().execute(someTask);
Is is unlikely but possible for the "instant garbage" executor to be
finalized while super.execute is in progress, causing failure with
RejectedExecutionException because the delegatee is already shutdown.
Wow! DelegatedExecutorService doesn't even have a finalize() method that
does a shutdown. So we have to put the reachabilityFence in it to
prevent the delegatee from becoming unreachable due to the delegator
becoming unreachable!
This whole notion that "this" can be unreachable whilst a method on it
is still executing is just broken - it's an unusable programming model.
Any code that does "new Foo().bar()" could fail unless Foo.bar() has a
reachability fence in it. :( Sheesh!
Cheers,
David