A thread's stack and its register context are deallocated upon its termination. Deallocation involves freeing resources, such as memory and registers, that were allocated during the thread's execution. This process occurs only when the thread terminates, not during blocking, spawning, or unblocking, as these are temporary states where resources remain in use. Thus, the correct answer is: (1) at the termination of thread.