Richard,
Usually, the JVM is responsible for invoking that method when an object is to be garbage collected so that you have an opportunity to tidy things up in your instance.
Make the difference between the synchronized keyword and synchronous which is a term for saying that a method will not be invoked until the previous one has finished executing.
For instance, the start method of class
Thread is not synchronous, because it returns immediately and let the Thread scheduler do its job, that is when you start a thread you get back the control almost directly (this is an asynchronous invocation).
In clear, if you decide to invoke finalize by yourself, the method will behave exactly as another method, a new invocation frame will be created, the method's body will be executed and the method will return. The method invocation following the invocation to finalize will only begin executing when finalize has finished (this is synchronous invocation).
HIH
[ February 12, 2002: Message edited by: Valentin Crettaz ]