To be honest, it sounds like the book is just plain wrong here. Your example code is a good illustration. Perhaps add a Thread.sleep(100) between the two start() calls to ensure that things alway happen in the order you expect - but the output makes it fairly clear that t1 was in wait before t2 ran (at least for one run, if not always guaranteed). And the specs (e.g.
JLS 17.14) are pretty clear that once a thread calls wait(), it only exits due to an actual notify(), notifyAll(), or timeout. Nothing about an "equivalent to notifyAll()" when a thread dies. But the authors are pretty smart guys, and I don't have a copy to see the full context of this comment, so perhaps there's another meaning that I'm missing.