Yes, this sort of thing always gets me confused as well. Helped by the fact that different people call the same thing by different names. Multi-processor, multiprocessing, multithreading...
If Unix forks, is that not another '
thread' of excecution, but not the same kind of 'thread' as we think of when we implement the Runnable interface in Java, because perhaps the fork is for a separate program.
A single program written in a language that supports threads is different than an OS that supports multitasking (yet another
word), whether it be preemptive or time-shared.
If I have a Java program running that takes a VERY long time to process a certain data chunk, i'll thread that process. So that when I click the "cancel" button on my GUI, it can actually hear it and react by gracefully killing the thread, and I get my program back. But what if I'm also running MS Word and Netscape Navigator... Each of these programs also has it's own thread of execution, which is possible because the OS can do multitasking (or how I maybe should have used the word... multiprocessing).
I tend to think of a single processor doing multiple things as multitasking, a single program that does multiple things as a multithreaded program, and a machine that has two or more processors as multiprocessing/multiprocessor.
But that's only my words.