Hi James,
Welcome to JavaRanch!
It's not multiple
programs, but multiple
threads. On old-timey operating-systems of yesteryear, each process could execute only one instruction at a time (some OSs only would execute one such program at a time, as well!) These days, most OSs offer (either as a kernel feature, or as a library) the appearance of multiple concurrent instruction streams that can execute simultaneously within a single process. Each stream is called a
thread. A thread has its own execution stack, but shares process memory with all the other threads in the application.
Java is a very thread-oriented language, and it's quite easy to write programs which appear to be doing multiple things at once.
Finally, I'll let you in on a secret: Pong, whether written in C or in Java, can easily be written in a single thread, as long as you can check the keyboard without blocking. In Java graphics, more or less everything happens on a single thread, but the keyboard is effectively polled -- there's no need to block and wait for a response. In C, you can generally do the same thing, although of course the details vary by platform.