Multiprocessing means that there are more than one process (program or executeable) running in the OS and if in terms of programming, then some interprocess communication or cooperation is taking place.
Multitasking and Multiprocessing mean essentially the same thing. Multitasking is when several processes share the same CPU by each taking a slice of time either pre-emptively (the OS decides) or cooperatively (the process decides).
Multithreading means that a single process (program) has more than one
thread of execution.
In both schemes it is important to protect data from corruption by concurrent access from different threads/processes. In a
Java multithreaded application we protect the data by using the synchronized key
word or an object monitor. For multiprocess applications it is necessary to use kernel level objects like semaphores and mutexes to keep the data protected.
Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius - and a lot of courage - to move in the opposite direction. - Ernst F. Schumacher