Está en la página 1de 1

PROGRAMACIÓN CONCURRENTE

ALFREDO AVENDAÑO SERRANO

¿Qué son los hilos?


Un hilo (thread) es un flujo de control secuencial dentro de
un programa, o con otras palabras, es un proceso en
ejecución dentro de un programa. (Horstmann S. & Cornell, 2006)
Hilos e interrupciones
¡No se puede parar la ejecución de un hilo desde fuera!
(En realidad sí, pero se desaconseja (métodos
obsoletos)…)
• Para parar un hilo de ejecución, tenemos que
solicitárselo mediante interrupt(), y confiar en que nos
hará caso.
• El hilo debería comprobar periódicamente si lo
quieren parar. • Algunos métodos de la librería de Java
Estados de los hilos generan una excepción si durante su
ejecución se les intenta interrumpir (como es
el caso de sleep())
Cuando se crea un hilo con el operador new el • Así se comprueba si nos han mandado una
hilo todavía no esta en ejecución. Esto
interrupción:
Nuevo significa que se halla en el estado nuevo.
Cuando el hilo esta en estado nuevo, el - Thread.interrupted()
programa todavía no ha empezado a ejecutar • Así se comprueba si otro hilo ha recibido
Una vez invocado al método start, el hilo es el código que contiene. una interrupción:
ejecutable. Un hilo ejecutable puede estar - isInterrupted()
Ejecutable
ejecutándose realmente, o no. Es cuestión del
sistema operativo dar tiempo al hilo para que Un hilo entra en el estado bloqueado cuando
se ejecute. se produce una de las acciones siguientes: (Eckel, 2007)
• El hilo se duerme llamando al método
Bloqueado sleep.
• El hilo llama a una operación que se
Los hilos mueren por una de estas dos bloquea por entrada-salida, esto es,
razones: una operación que no retornará a
• Fallecen de muerte natural cuando el Muerto quien la haya invocado.
método run concluye normalmente.
• Fallecen de forma inesperada cuando
hay una excepción sin capturar que
Propiedades de los hilos
causa la conclusión del método run. (Horstmann S. & Cornell, 2006)
Las propiedades más interesantes de la clase Thread son:
• Name: permite darle un nombre a un thread que los distinga del
resto.
Sincronización • CurrentThread: contiene una referencia al thread que esta
actualmente en ejecución.
Puntos clave con la sincronización y el seguro de los objetos: • ApartmentState: obtiene o establece el estado de apartamento de
este subproceso.
Solo métodos (o bloques) pueden ser
sincronizados, nunca una variable o clase. Cada objeto tiene solamente un seguro. • CurrentContext: obtiene el contexto actual donde se esta
ejecutando el subproceso.
Si una clase tiene ambos tipos de • CurrentCulture: obtiene o establece la referencia cultural del
No todos los métodos de una clase deben métodos, múltiples hilos pueden acceder a subproceso actual.
ser sincronizados, una misma clase puede sus métodos no sincronizados, el único
tener métodos sincronizados y no • CurrentPrincipal: obtiene la entidad de seguridad actual del
código protegido es aquel dentro de un subproceso.
sincronizados. método sincronizado.
• CurrentUICulture: establece la referncian cultural actual utilizada
Si un hilo pasa a estado dormido(sleep) no por el administrador de recursos para buscar recursos específicos
Se puede sincronizar un bloque de código
libera el o los seguros que pudiera llegar a de la referencia cultural en tiempo de ejecución.
en lugar de un método.
tener, los mantiene hasta que se completa. • ExecutionContext: obtiene un objeto que contiene información
sobre los distintos contextos del subproceso actual.
• IsAlive: obtiene un valor que indica el estado de ejecución del
subproceso actual.

En cualquier momento en el que dos o más threads acceden


al mismo objeto o bloque de código.
Aplicaciones de los hilos
• Cajero ATM: la atención hacia los clientes no es suficiente,
es por ello que se colocan mas de 1 cajero automático.
• Semáforo: es manejado por un thread y por
temporizadores.

Sobresincronizar causa retrasos innecesarios, cuando dos


o más threads no tratan de ejecutar el mismo bloque de
código.