The state of a thread includes the following:
Two threads of the same process share global variables and the heap, but each has its own stack and stack pointer. As such, two threads cannot execute on different machines due to the necessity to share memory. However, this also makes it possible for threads to share variables and dynamically allocated objects.