Mukesh, In a nutshell, a process can contain multiple threads. In most multithreading operating systems, a process gets its own memory address space; a thread doesn't. Threads typically share the heap belonging to their parent process. For instance, a JVM runs in a single process in the host O/S. Threads in the JVM share the heap belonging to that process; that's why several threads may access the same object. Typically, even though they share a common heap, threads have their own stack space. This is how one thread's invocation of a method is kept separate from another's. This is all a gross oversimplification, but it's accurate enough at a high level. Lots of details differ between operating systems. jply
Just to complicate this a little, some operating systems (mainly Linux at the moment) provide what is known as "native threads". These share process resources in the same way as threads described above, but also appear in the process listing and may be manipulated using process control tools. Older Linux JVMs used "green threads" which are all hidden inside a single process, but JDK 1.3 uses native threds by default. A typical comment from someone who has just upgraded to JDK 1.3 might be "How come there are now 5 copies of my Java Virtual Machine running when my application only used to need one?" If you see this kind of thing, don't worry, it's just Linux native threads.