E
n la naturaleza se presentan innumerables ejemplos de procesos que seRealizan de manera parela, simultáneos o concurrentes. Por ejemplo, parael caso del lector, los procesos que está realizando todo su cuerpo integral,mientras realiza la acción consciente, de leer este párrafo. En el plano delos sistemas artificiales, la concurrencia es un denominador común, elcomputador, la internet, los juegos, en los sistemas sofisticados de losautomóviles modernos, las actuales comunicaciones inalambricas, etc.Por tales razones, la concurrencia es un fenómeno importante de tratar, yaque permite el desarrollo de sistemas capaces de adelantar, múltiples procesos simultáneamente. A su vez cada proceso se puede componer demúltiples tareas, ejecutándose según ciertas reglas, de manera simultánea.Hasta el momento se han desarrollado programas que realizan una solatarea, entendiendose por tarea, un hilo de ejecución o un
thread
, tambiendenominados de flujo único, en contraste con los programas que realizanmás de una tarea, o de multitareas o
multithreads
, denominados de flujomúltiple. Especificamente una tarea se encarga de controlar un únicoaspecto, dentro de la ejecución de un programa, por ejemplo el manejo degráficos, las entradas/salidas de archivos en disco, u otros. Las tareas sediferencian de los procesos, en que las primeras comparten los mismosrecursos del programa que las contiene, en tanto los procesos tienen enforma separada su código, así como sus datos.Se puede definir hilo como una secuencia única de control de flujo dentrode un programa. Entendiendo que puede haber más de una secuencia decontrol o hilos. Java permite realizar programación multihilo, el cualconsiste en programas que contienen dos o más partes que se ejecutan demanera concurrente. Una parte que se ejecuta independientemente de lasdemás se denomina un hilo (
thread
).