do we need separate thread for FirstThread
Per Bothner
per@bothner.com
Thu Feb 8 16:58:00 GMT 2001
Cedric Berger <cedric@wireless-networks.com> writes:
> Per Bothner wrote:
> >
> > Bryce McKinlay <bryce@albatross.co.nz> writes:
> >
> > > > * Avoid creating threads in single-threaded programs.
> > >
> > > Well, we can't really do this, since a separate finalization thread (for
> > > example) will be required in order to implement finalization correctly.
> >
> > I'm missing something here. The JLS says finalizer are run in an
> > "unspecified" thread. There seem to be two logical alternatives:
> > (1) a special finalizer or gc thread, or
> > (2) the thread that causes gc to be invoked (by doing a new).
> > Why is (2) prohibited?
>> (2) is prohibited in a multithreaded application because of risks
> of deadlock.
Could you explain why? If finalizers are triggered by gc which is
triggered by new, then the thread that did a 'new' isn't going
anywhere until gc is done. I guess I could conceive of a finalizer
waiting for a resource being held by the thread doing the 'new',
and the deadlock could be avoided by running the finalizers in a
separate thread, return from gc (and 'new') while the finalizers
run in the background. But why? Is there any non-bogus program
that could benefit from this? And is there anything in the specs
(or otherwise) that prohibits (2)?
--
--Per Bothner
per@bothner.com http://www.bothner.com/~per/
More information about the Java
mailing list