On 21 January 2011 15:52, Konstantin Kolinko <knst.koli...@gmail.com> wrote:
> 2011/1/21 maxxe...@gmail.com <maxxe...@gmail.com>:
>> In TC6 catalina core, ContainerBase class defines this field to stop
>> the background processor thread:
>>
>>     private boolean threadDone = false;
>>
>> Shouldn't it be a volatile? Because the background processor refers to
>> a classloader, could it prevent a (weak) classloader from being gc'ed?
>>
>
> Reading Chapter 17 of JLS 3rd edition, that defines the current (aka
> "new") memory model [1],  Ch. 17.9 "Sleep and Yield" explicitly
> mentions that sleep does not have "any synchronization semantics", but
> interrupt() has synchronization semantics per Ch.17.4.4.
>
> I think that using interrupt() is the reason why no issue have been
> observed here and why "volatile" is not necessary. (Though I wouldn't
> object if "volatile" were added to that field.)
>
> [1] http://java.sun.com/docs/books/jls/third_edition/html/memory.html
>

Thanks, very useful.

I suggest either adding volatile or at least adding a comment to say
that interrupt() provides the necessary synch.

>
> Best regards,
> Konstantin Kolinko
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
> For additional commands, e-mail: dev-h...@tomcat.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to