On Mon, 4 Jul 2022 12:09:46 GMT, David Holmes <dhol...@openjdk.org> wrote:
>>> Is "deadlock" accurate? >> >> Yes. >> >> In the context of the specification, "shutdown hook" means _application_ >> shutdown hook - as far as the specification is concerned, application >> shutdown hooks are the only kind of hooks. Right? >> >> For example, the following will deadlock (when run with the changes in this >> PR): >> >> >> public class TestHook { >> public static void main(String... arg) { >> Thread hook = new Thread("my-hook") { >> @Override >> public void run() { >> System.exit(1); >> } >> }; >> Runtime.getRuntime().addShutdownHook(hook); >> System.exit(0); >> } >> } > > It is a general deadlock, not a monitor based deadlock: the thread that > called exit and holds the lock has to join() the hook thread. The hook thread > blocks on the lock held by the exiting thread. Neither thread can progress. You folks are correct. I hadn't noticed the ApplicationShutdownHooks thing. Sorry for the noise. ------------- PR: https://git.openjdk.org/jdk/pull/9351