this is the classic interview question,well, in addition ,to begin with it ,let us discuss what is difference for program ,process, thread?
program,it is the certain amount of the static codes ,it does not environment to support it to start to run ,so it does not occupy the memory.
progress, it is the an execution of the program. nowadays , most of the operation systems are the multiple tasks , multiple users systems .the process consists counter ,stack , data and resource. in order to make the multiple tasks run at the same time , a process consists one to many threads ,one thread only resides in one process.
thread is a single execution sequence within a process. threads have their own private stack and share the heap with each other .so it is the thread safe for thread local variables ,it is not thread safe to the global variables .it should synchronize the heap