RFR 9: 8138696 : java.lang.ref.Cleaner - an easy to use alternative to finalization
Roger Riggs
Roger.Riggs at oracle.com
Fri Dec 4 22:20:34 UTC 2015
Hi Peter,
On 12/04/2015 04:31 PM, Peter Levart wrote:
>
> ...
>>
>>>
>>>
>>> Would writing something like the following make sense: "A future
>>> implementation may use more than one thread. The ThreadFactory
>>> should not assume that only one thread will be requested." ?
>> I'm not sure it adds anything to talk about how many times the thread
>> factory will be used.
>> A ThreadFactory has no specific mins or maxes.
>>
>> Roger
>
> Yes, but other parts of javadoc strictly mention a thread (as singular
> object).
>
> Users are sloppy and like to depend on implementation details. They
> will be tempted to write code like this:
>
> Thread t = new Thread(...);
> t.setName(...);
> ...
> Cleaner c = Cleaner.create(() -> t);
>
> ...and it will work. But will fail if some time in the future, Cleaner
> decides to request multiple threads. Are you sure Cleaner will always
> use a single thread? It will if the spec. says so. But I don't think
> there is a reason to specify that and limit the implementation to one
> thread forever.
ok, how about:
* On each call the {@link ThreadFactory#newThread(Runnable) thread
factory} * should return a new thread, {@link Thread#start() not
started}, * with an appropriate * {@linkplain
Thread#getContextClassLoader context class loader}, * {@linkplain
Thread#getName() name}, * {@linkplain Thread#getPriority() priority}, *
permissions, etc.
Which brings up a gap in the specification of create() that it can throw
exceptions related
to creation and starting of threads, including SecurityExceptions,
IllegalThreadStateException, etc.
If a future cleaner implementation were to use multiple threads, it
would need to handle
exceptions from invoking ThreadFactory.newThread and be designed to cope
with them.
A successfully created cleaner will have at least one thread to work with.
Thanks, Roger
>
> Regards,
>
> Peter
>
>>
>>>
>>> Regards, Peter
>>>
>>> On 12/04/2015 05:55 PM, Roger Riggs wrote:
>>>> Hi,
>>>>
>>>> Thanks for the review and comments.
>>>>
>>>> The webrev[1] and javadoc[2] are updated in place.
>>>>
>>>> Roger
>>>>
>>>> [1] http://cr.openjdk.java.net/~rriggs/webrev-cleaner-8138696/
>>>> [2] http://cr.openjdk.java.net/~rriggs/cleaner-doc/index.html
>>>>
>>>> On 12/3/2015 4:50 PM, mark.reinhold at oracle.com wrote:
>>>>> Looks good -- thanks for the further simplification.
>>>>>
>>>>> Minor editorial comments, to add what Kim and Chris noted:
>>>>>
>>>>> - In many places you write, e.g., "Cleaner" rather than "{@code
>>>>> Cleaner}". For consistency with the rest of the package it'd be
>>>>> better in most cases just to write "cleaner" or, if its
>>>>> nature as
>>>>> a class is important, write "{@code Cleaner}". The same goes
>>>>> for
>>>>> Cleanable, Thread, ThreadFactory, and all other types.
>>>>>
>>>>> - The specification of Cleaner::create() mentions
>>>>> "ThreadContextClassLoader", but that's not actually a type
>>>>> anywhere
>>>>> in the JDK. Suggest "{@linkplain
>>>>> java.lang.Thread#getContextClassLoader context class loader}.
>>>>>
>>>>> - In the same method, it'd be helpful to provide links into the
>>>>> Thread
>>>>> class (or wherever) for the concepts of access-control
>>>>> context and
>>>>> thread locals.
>>>>>
>>>>> - Mark
>>>>
>>>
>>
>
More information about the core-libs-dev
mailing list