Threads allow multiple tasks to run concurrently within a single process. Threads have their own call stack and can run asynchronously, allowing programs to take advantage of multiprocessor systems and perform background tasks. A thread goes through various states in its lifecycle including new, runnable, running, blocked, and terminated. When first created, a thread is new; it then becomes runnable when start() is called but may not run immediately if the scheduler chooses another thread.