The Java programming has replaced C++ as the predominant programming language, largely because Java programmers are approximately twice as productive when developing new code, and are five to ten times as productive during maintenance of existing code. Various real-time Java technologies offer to extend these benefits into the domain of embedded real-time systems. This paper surveys the various approaches, characterizing the strengths and weaknesses of each in order to enable developers to select the best tool for each particular job.