Existen varios tipos de threads que pueden aparecer en una aplicación:
* Threads completamente independientes, que realizan tareas no relacionadas. Como el caso de imprimir un documento.
* Threads que trabajan con una misma tarea, es decir se ayudan entre ellos, pero sin interferir ni intercambiar relación entre ellos. Por ejemplo, threads que colaboran en el producto de dos matrices, ocupándose cada una de ellas de calcular ciertas filas de la matriz producto.
* Threads que utilizan recursos de modo mutuamente exclusivo, aunque sin tener que coordinar sus actividades. Este ocurre en los threads que intentan leer o actualizar un registro en la base de datos.
* Threads que deben coordinar sus actividades, de modo que una de ellas no puede empezar o continuar hasta que la otra haya realizado su tarea. Un ejemplo muy conocido es el problema del productor-consumidor .