Real-Time Java Platform Programming
Where the first edition of Real-Time Java Platform Programming expended much effort on the dark corners of the RTSJ (e.g., using corners of scoped memory and ATC behavior), the second edition concentrates on the RTSJ APIs and code patterns that have proven to be useful:
The synchronized block is probably the best general method for masking async exceptions.
and practical use of real-time analysis:
Real-time applications have a well-established reputation for running perfectly under test, and then failing at the worst possible moment “in the field.” One defense against this is to repeat earlier real-time analysis using worst-case measurements from a real system.
It is forthright in recommending against RTSJ coding practices that are legal but troublesome:
...it is almost impossible to justify use of the scoped non-default initial memory area.
The RTSJ does not prevent interactions between heap and no-heap modes except when the interaction requires the no-heap side to use a heap reference. For instance:...It is unwise to do any of the above.
One interesting result of the emphasis on "how it's actually used" is a deemphasis on scoped memory (The deemphasis is only relative to the first edition. There's still plenty of material on scoped memory.) It turns out that, while scoped memory is useful, its most fruitful applications are simple ones, and even those code patterns are often unnecessary.
Errors have been found in this book! The current bug list is here.
If you don't yet have your copy of Real-Time Java Platform Programming, 2nd Edition, or you need more copies, you'll find a number of purchase options on the Purchase page.
The source code from which the examples in the book were extracted can be found in a tarball, here.
The Getting Started chapter from the book is available, in full, at this link.