Sei sulla pagina 1di 9

Hilos (Threads)

Contexto de ejecucin, proceso liviano (lightweight) Un flujo secuencial de instrucciones dentro de un programa

Hilo Programa

Multiprocesos vs Multihilos

Multiproceso:

Dos o ms programas (procesos) independientes ejecutndose en forma paralela Cada proceso tiene su propio espacio de memoria, su propio conjunto de variables, su propia pila, etc. El control lo tiene el sistema operativo

Multihilo:

Dos o ms tareas ejecutndose en forma paralela dentro de un programa Comparten los recursos del programa El control lo tiene el programa

Programa

Multihilo
Recursos variables, pila, archivos, sockets, etc.

Hilos

Hilos

El mtodo run()

Mtodo de la clase Thread, es el que realiza el trabajo, el que se llama para que arranque un hilo su ejecucin Est mtodo es el que se tiene que redefinir (override) para que tu hilo haga algo El mtodo run en la clase Thread no hace nada Cuando un objeto tiene en ejecucin el mtodo run(), ese hilo est compitiendo con los dems hilos activos por recursos del sistema (CPU) Cuando un objeto termina la ejecucin de su mtodo run(), el hilo se muere

Dos maneras de crear un hilo de ejecucin

Extender la clase Thread, reprogramando el mtodo run()que est vacio

La manera natural de crear hilos

Implementar la interfaz Runnable, programando el mtodo run()

En caso de que los objetos que se quieren ejecutar en un hilo pertenezcan a una clase que extiende a otra

Comentarios preliminares

El arranque de hilos se realiza en dos pasos: Crear una instancia de la clase Thread Llamar al mtodo run() del objeto creado La llamada al mtodo run() no se hace directamente, sino que se llama al mtodo start() del objeto, esto causa que la mquina virtual llame a run() El mtodo sleep(long x) de la clase Thread, ocasiona que el hilo deje de competir por los recursos durante x milisegundos, despus de ese tiempo, comienza a pelear por recursos otra vez Al llamar a start, automticamente hay dos hilos corriendo, el que se arranc con start() y el que ejecut la llamada

Estados de un hilo

Hilo nuevo

Hilo recin creado Compitiendo por CPU No compitiendo por CPU

Ejecutable

Detenido

Muerto

Estados de un hilo
New Thread() start() yield() - sleep(x) - wait() - bloqueado en I/O - suspend()

Nuevo
- El mtodo run() termin su ejecucin - stop()

Ejecutable

Detenido
- Transcurrieron x msegs - notify() o notifyAll() - se complet I/O - resume()

Muerto

Estados de un hilo

new Tread(...)

Creado, pero no todava no comienza ejecucin crea los recursos necesarios para su ejecucin, lo deja listo para que la mquina virtual lo ponga a correr llamando al mtodo run(), compite por los recursos del sistema La mquina virtual puede seleccionar otro hilo para ejecucin, para salir de este estado la accin debe de corresponder a la accin que lo bloque
Termin run(), una vez muerto un hilo no puede volver a ejecucin

start()

Bloqueado por I/O, sleep() o wait()

Muerto

Potrebbero piacerti anche