On 21 January 2011 15:52, Konstantin Kolinko <[email protected]> wrote: > 2011/1/21 [email protected] <[email protected]>: >> 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: [email protected] > For additional commands, e-mail: [email protected] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
