per far fare ad un programma più cose contemporaneamente.
Ad esempio, un clientmail è un processo che è indipendente con emule che scarica e l'antivirus che controlla, i processi sono residenti in percorsi di memoria totalmente diversi, quindi un processo(sarebbe un programma) è l'unità fondamentale del sistema operativo, un thread invece è l'unità fondamentale del programma stesso, più thread stanno nello stesso spazio di memoria, è più semplice comunicare fra thread che fra processi(dove bisogna utilizzare pipe o socket), solo che ci sono problemi di sincronizzazione con i thread.
Ritornando al cliuentmail, un thread è ad esempio quello che ti permette di spedire la posta mentre tu scrivi un mail e mentre il client ne sta ricevendo un'altra.
Se tutto fosse in un unico thread il programma si bloccherebbe:

codice:
  |
  |
  |
Manda mail
  |
  |(solo quando le mail saranno mandate)
Ricevi mail

ecc...
col thread l'azione di manadre una mail si stacca e continua cmq l'esecuzione.
In un pezzo di codice java ad esempio se scrivi

metodo1()
metodo2()

metodo 2 verrò chiamato solo quando metodo1 avrà completamente finoto di fare quello che doveva, se metodo1 fosse un metodo start(che fa partire un thread), appena il thread parte metodo2 e tutto il codice successivo verrà eseguito in contemporanea.

Un altro esempio è la chat, per ogni utente connesso il server crea un thread che gestirà l'utente connesso in contemporanea con gli altri.