0% encontró este documento útil (0 votos)
99 vistas26 páginas

Programacion Multihilos

Un hilo es una tarea que se puede ejecutar de forma concurrente con otras tareas, compartiendo recursos como memoria y archivos. Los programas de flujo único usan un solo hilo, mientras que los programas de múltiples hilos dividen las tareas en subtareas concurrentes. Los estados de un hilo incluyen nuevo, ejecutable, en ejecución, detenido y muerto. La comunicación entre hilos se logra mediante sincronización para controlar el acceso a recursos compartidos.

Cargado por

carlos20093360
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
99 vistas26 páginas

Programacion Multihilos

Un hilo es una tarea que se puede ejecutar de forma concurrente con otras tareas, compartiendo recursos como memoria y archivos. Los programas de flujo único usan un solo hilo, mientras que los programas de múltiples hilos dividen las tareas en subtareas concurrentes. Los estados de un hilo incluyen nuevo, ejecutable, en ejecución, detenido y muerto. La comunicación entre hilos se logra mediante sincronización para controlar el acceso a recursos compartidos.

Cargado por

carlos20093360
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 26

Profesor: Ing.

Edgar Garca

Qu es un hilo?
Un hilo es bsicamente una tarea que puede ser ejecutada en paralelo con otra tarea. Un hilo de ejecucin o subproceso es una caracterstica que permite a una aplicacin realizar varias tareas a la vez (concurrentemente). Los distintos hilos de ejecucin comparten una serie de recursos tales como el espacio de memoria, los archivos abiertos, situacin de autenticacin, etc. Esta tcnica permite simplificar el diseo de una aplicacin que debe llevar a cabo distintas funciones simultneamente.

Programas de Flujo Unico


Un programa de flujo nico o mono-hilvanado (single-thread) utiliza un nico flujo de control (thread) para controlar su ejecucin. Muchos programas no necesitan la potencia o utilidad de mltiples flujos de control.

Ejemplo Flujo Unico


public class HolaMundo { public static void main( String args[] ) { System.out.println( "Hola Mundo!" ); } } Aqu, cuando se llama a main(), la aplicacin imprime el mensaje y termina. Esto ocurre dentro de un nico thread

Programas de Multiples Flujos


Son programas que dividen las tareas en varias subtareas, compartiendo recursos entre ellas para llegar a un fin comn.

Ejemplo Multiples Flujos


Ver Ejemplo #1

Creacin de un Thread
Implementando Runnable Extendiendo de Thread

Heredando Thread
Solamente tenemos que sobreescribir el metodo run() de la clase Thread para escribir el cdigo que se estar ejecutando cuando se inicie el thread. Esta opcin imposibilita que la clase pueda heredar comportamientos de otra clase a menos que se cree una clase hija y extienda de esta, siempre y cuando la clase no este marcada como final.

Implementando Runnable
Con esta manera tenemos un diseo mas abierto a ser extendido ya que la clase a la que le implementemos Runnable puede heredar caracteristicas de otras. Al implementar Runnable estaremos obligados a implementar el mtodo abstracto run().

Arranque de un Thread
Todos los Threads corren bajo un thread principal, que al final de todos es el Thread donde esta ejecutandose el metodo main. Ejemplo: t1 = new TestTh( "Thread 1",(int)(Math.random()*2000) ); t1.start(); start(), en realidad es un mtodo oculto en el thread que llama al mtodo run().

Manipulacin de un Thread
Poner un thread a dormir: sleep(); Suspender: Es poner un hilo en espera indefinidamente t1.suspend(); Resumir: Es rehabilitar un hilo que anteriormente estaba en espera. t1.resume(); Stop: Terminar la ejecucin de un thread, pero no lo elimina el objeto de la memoria, se puede iniciar con start otra vez. t1.stop();

Estados de un Thread

Nuevo Thread
La siguiente sentencia crea un nuevo thread pero no lo arranca, lo deja en el estado de "Nuevo Thread Cuando un thread est en este estado, es simplemente un objeto Thread vaco. El sistema no ha destinado ningn recurso para l. Desde este estado solamente puede arrancarse llamando al mtodo start(), o detenerse definitivamente, llamando al mtodo stop(); la llamada a cualquier otro mtodo carece de sentido y lo nico que provocar ser la generacin de una excepcin de tipo IllegalThreadStateException.

Ejecutable
La llamada al mtodo start() crear los recursos del sistema necesarios para que el thread puede ejecutarse, lo incorpora a la lista de procesos disponibles para ejecucin del sistema y llama al mtodo run()del thread Este estado es Ejecutable y no En Ejecucin, porque cuando el thread est aqu no esta corriendo. Una vez el JVM le de su tiempo para ejecutarse el pasa a Ejecucin.

Parado
Se encuentra en este estado cuando se dan las siguientes condiciones:
suspend(); delete(); wait(); sleep();

Muerto
Un Thread puede morir de dos formas:
Llamar el metodo stop(); Termina de ejecutar su metodo run();

Scheduling
El planificador (o scheduler en ingls) es un componente funcional muy importante de los sistemas operativos multitarea y multiproceso, y es esencial en los sistemas operativos de tiempo real. Su funcin consiste en repartir el tiempo disponible de un microprocesador entre todos los procesos que estn disponibles para su ejecucin

Scheduler
Hay dos caractersticas de los threads que el scheduler identifica en este proceso de decisin:
Prioridad del thread Indicador de Demonio

Thread Daemon
Son hilos de muy baja prioridad (llamados servicios) que normalmente se ejecutan en periodos muy largos usando pocos recurso. Para crear un demonio se usa setDaemon():true o false Ejemplos:
Garbage Collector

Prioridad del Thread


El scheduler determina el thread que debe ejecutarse en funcin de la prioridad asignada a cada uno de ellos. El rango de prioridades oscila entre 1 y 10. La prioridad por defecto de un thread es Thread.NORM_PRIORITY con un valor de 5. Hay otras dos variables estticas disponibles, que son Thread.MIN_PRORITY, fijada a 1, y Thread.MAX_PRIORITY, que tiene un valor de 10.

Tipos de Scheduler
Pre-emptivo: Asigna un tiempo a cada Thread No pre-empivo: Ejecuta un thread a la vez y hasta que no termina no ejecuta otro.

Pre-emptivo
El Scheduler decide cual thread va a ser ejecutado y llama su metodo resume() y el metodo suspend() a los dems threads que estan en el Scheduler. El mtodo yield() es la forma en que un thread fuerza al scheduler a comenzar la ejecucin de otro thread que est esperando

Comunicacin entre Threads

Uso synchronized
La palabra reservada synchronized se usa para indicar que ciertas partes del cdigo, (habitualmente, una funcin miembro) estn sincronizadas, es decir, que solamente un subproceso puede acceder a dicho mtodo a la vez. Se puede sincronizar un mtodo o un bloque de codigo.

Comunicacin entre Threads


El ejemplo clsico de comunicacin de threads es un modelo productor/consumidor. Un thread produce una salida, que otro thread usa (consume), sea lo que sea esa salida.

Vamos entonces a crear un productor, que ser un thread que ir sacando caracteres por su salida; crearemos tambin un consumidor que ira recogiendo los caracteres que vaya sacando el productor y un monitor que controlar el proceso de sincronizacin entre los threads. Funcionar como una tubera, insertando el productor caracteres en un extremos y leyndolos el consumidor en el otro, con el monitor siendo la propia tubera.

También podría gustarte