Real-time systems have to respond to externally generated input stimuli within a finite and predictable time. Their correctness depends not only on the logical results of the computations, but also on the time at which those results are produced.
When Java emerged as a serious programming language in 1994, it was treated with disdain by much of the real-time community. Although the language was interesting from a number of perspectives – not least the fact that it had an integrated concurrent object-oriented programming model – the whole notion of Java as a real-time programming language was laughable. “Java and Real-time” was considered, by many, an oxymoron. What we failed to appreciate was the determination of the Java community to propagate the language into every conceivable application area.
Just over 10 years since its first conception, Java, augmented by the Real-Time Specification for Java, is one of the most exciting developments in real-time systems so far this century. The approach has been to extend the concurrency model so that it supports real-time programming abstractions and to provide a complementary approach to memory management that removes the temporal uncertainties of garbage collection.
This book is concerned with both concurrent and real-time programming in Java. To fully understand the facilities available for real-time programming, it is first necessary to have a good appreciation of the strengths and weaknesses of multi-threaded programming in conventional Java. Once this understanding has been achieved, the motivations for the Real-Time Specification become apparent and the full details of the real-time functionality can then be presented.