Threads allow concurrency within a process by separating the execution state (program counter, registers, stack) from the process. This allows a process to have multiple execution streams (threads) that can run independently while sharing the process's resources like memory. Key benefits of threads include improved responsiveness, easy resource sharing between threads, and better utilization of multiprocessor systems.