SlideShare una empresa de Scribd logo
1 de 14
QUE ES UN HILO
 Un hilo es simplemente una tarea que puede ser ejecutada al mismo tiempo
con otra tarea.
 Un thread se puede considerar como la agrupación de un trozo de programa
junto con el conjunto de registros del procesador que utiliza y una pila de
máquina.
 El conjunto de los registros y de la pila de cada thread se denomina contexto.
 La creación de un nuevo hilo es una característica que permite a una
aplicación realizar varias tareas a la vez (concurrentemente).
 Los distintos hilos de ejecución comparten una serie de recursos tales como el
espacio de memoria, los archivos abiertos, situación de autenticación, etc.
 Esta técnica permite simplificar el diseño de una aplicación que debe llevar a
cabo distintas funciones simultáneamente.
 Los hilos de ejecución que comparten los mismos recursos, sumados a estos
recursos, son en conjunto conocidos como un proceso.
 El hecho de que los hilos de ejecución de un mismo proceso compartan los recursos
hace que cualquiera de estos hilos pueda modificar éstos.
 Cuando un hilo modifica un dato en la memoria, los otros hilos acceden a ese dato
modificado inmediatamente.
 Lo que es propio de cada hilo es el contador de programa, la pila de ejecución y el
estado de la CPU (incluyendo el valor de los registros).
FUNCIONAMIENTO DE UN HILO
 Al igual que los procesos, los hilos poseen un estado de ejecución y
pueden sincronizarse entre ellos para evitar problemas de compartición
de recursos.
 Generalmente, cada hilo tiene una tarea especifica y determinada,
como forma de aumentar la eficiencia del uso del procesador.
 Estados de un hilo
 Los principales estados de los hilos son: Ejecución, Listo y Bloqueado.
No tiene sentido asociar estados de suspensión de hilos ya que es un
concepto de proceso.
 En todo caso, si un proceso está expulsado de la memoria principal
(RAM), todos sus hilos deberán estarlo ya que todos comparten el
espacio de direcciones del proceso.
 Cambio de estados
 Creación: Cuando se crea un proceso se crea un hilo para ese proceso.
Luego, este hilo puede crear otros hilos dentro del mismo proceso,
proporcionando un puntero de instrucción y los argumentos del nuevo
hilo. El hilo tendrá su propio contexto y su propio espacio de la
columna, y pasará al final de los Listos.
 Bloqueo: Cuando un hilo necesita esperar por un suceso, se bloquea
(salvando sus registros de usuario, contador de programa y punteros de
pila). Ahora el procesador podrá pasar a ejecutar otro hilo que esté al
principio de los Listos mientras el anterior permanece bloqueado.
 Desbloqueo: Cuando el suceso por el que el hilo se bloqueó se produce,
el mismo pasa a la final de los Listos.
 Terminación: Cuando un hilo finaliza se liberan tanto su contexto como
sus columnas.
PROGRAMA DE FLUJO UNICO
 Un programa de flujo único, tarea única o mono -hilo (single-thread)
utiliza un único flujo de control (thread) para controlar su
ejecución.
 Muchos programas no necesitan la potencia o utilidad de multiples
tareas.
 public class HolaMundo{
public static void main (string args[]){
System.out.println( " Hola Mundo " );
}
}
 Aqui, Cuando se llama al main(), la aplicación imprime el mensaje y
termina. Esto ocurre dentro de una única tarea (thread).
PROGRAMAS DE FLUJO MÚLTIPLE
 un programa multihilo(Flujo múltiple) permite que cada thread
comience y termine tan pronto como sea posible.
 Este comportamiento presenta una mejor respuesta a la entrada en
tiempo real.
// Definimos unos sencillos hilos. Se detendrán un rato
// antes de imprimir sus nombres y retardos
class TestTh extends Thread {
private String nombre;
private int retardo;
// Constructor para almacenar nuestro nombre
// y el retardo
public TestTh( String s,int d ) {
nombre = s;
retardo = d; }
// El metodo run() es similar al main(), pero para
// threads. Cuando run() termina el thread muere
public void run() {
// Retasamos la ejecución el tiempo especificado
try {
sleep( retardo );
} catch( InterruptedException e ) { }
// Ahora imprimimos el nombre
System.out.println( "Hola Mundo! "+nombre+" "+retardo );
}
}
public class MultiHola {
public static void main( String args[] ) {
TestTh t1,t2,t3;
// Creamos los threads
t1 = new TestTh( "Thread 1",(int)(Math.random()*2000) );
t2 = new TestTh( "Thread 2",(int)(Math.random()*2000) );
t3 = new TestTh( "Thread 3",(int)(Math.random()*2000) );
// Arrancamos los threads
t1.start();
t2.start();
t3.start();
}
}
Creación de un hilo
 Si la clase está destinada a ser ejecutado como un hilo, se puede lograr esto
mediante la implementación de una interfaz Runnable . Usted tendrá que
seguir tres pasos básicos
Paso 1
 Como primer paso, es necesario implementar un método run () proporcionado
por Runnable . Este método proporciona un punto de entrada para el hilo y le
podemos poner lo que necesitamos dentro del metodo. A continuación se
presenta una sintaxis sencilla del método run () -
 public void run( )
Paso 2
 Como segundo paso, una instancia de un hilo objeto mediante el siguiente
constructor –
 Thread(Runnable threadObj, String threadName);
 Cuando, threadObj es una instancia de una clase que implementa Runnable
y threadName es el nombre dado al nuevo hilo.
Paso 3
 Una vez que se crea un objeto Thread, se puede iniciar llamando a start()
que realiza una llamada al método run (). A continuación se presenta una
sintaxis simple método start ()
 void start();

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Fundamentos de la Refactorización
Fundamentos de la RefactorizaciónFundamentos de la Refactorización
Fundamentos de la Refactorización
 
Programando en java
Programando en javaProgramando en java
Programando en java
 
Eclipse refactoring
Eclipse refactoringEclipse refactoring
Eclipse refactoring
 
Hilos – threads en java
Hilos – threads   en javaHilos – threads   en java
Hilos – threads en java
 
Hilos En Java
Hilos En JavaHilos En Java
Hilos En Java
 
Procesos e Hilos en los Sistemas Operativos
Procesos e Hilos en los Sistemas OperativosProcesos e Hilos en los Sistemas Operativos
Procesos e Hilos en los Sistemas Operativos
 
Tema 12 hilos en java por gio
Tema 12   hilos en java por gioTema 12   hilos en java por gio
Tema 12 hilos en java por gio
 
Threads en Java
Threads en JavaThreads en Java
Threads en Java
 
Programación multitarea
Programación multitareaProgramación multitarea
Programación multitarea
 
hilos informatica
hilos informatica hilos informatica
hilos informatica
 
Programación III (Java) - 08 threads
Programación III (Java) - 08 threadsProgramación III (Java) - 08 threads
Programación III (Java) - 08 threads
 
Procesos e hilos_parte_3
Procesos e hilos_parte_3Procesos e hilos_parte_3
Procesos e hilos_parte_3
 
2o departamental Programacion 3
2o departamental Programacion 32o departamental Programacion 3
2o departamental Programacion 3
 
Slony i
Slony iSlony i
Slony i
 
Lab5 guia
Lab5 guiaLab5 guia
Lab5 guia
 
Curso de Sistemas Operativos - Unidad Procesos e Hilos
Curso de Sistemas Operativos - Unidad Procesos e HilosCurso de Sistemas Operativos - Unidad Procesos e Hilos
Curso de Sistemas Operativos - Unidad Procesos e Hilos
 
Procesos Hilos y Planificación
Procesos Hilos y PlanificaciónProcesos Hilos y Planificación
Procesos Hilos y Planificación
 
Tarea Repetible
Tarea RepetibleTarea Repetible
Tarea Repetible
 
2.3 procesos ligeros
2.3 procesos ligeros2.3 procesos ligeros
2.3 procesos ligeros
 
Java Threads (Hilos en Java)
Java Threads (Hilos en Java)Java Threads (Hilos en Java)
Java Threads (Hilos en Java)
 

Similar a Thread (20)

Tópicos Avanzados de Programación - Unidad 3 programacion concurrente
Tópicos Avanzados de Programación - Unidad 3 programacion concurrenteTópicos Avanzados de Programación - Unidad 3 programacion concurrente
Tópicos Avanzados de Programación - Unidad 3 programacion concurrente
 
Preguntas
PreguntasPreguntas
Preguntas
 
DIAPOSITIVAS UNIDAD3.pdf
DIAPOSITIVAS UNIDAD3.pdfDIAPOSITIVAS UNIDAD3.pdf
DIAPOSITIVAS UNIDAD3.pdf
 
Hilo de ejecución
Hilo de ejecuciónHilo de ejecución
Hilo de ejecución
 
Programación multihebra en java
Programación multihebra en javaProgramación multihebra en java
Programación multihebra en java
 
Topicos Avanzados de Programacion - Unidad 4 programacion concurrente
Topicos Avanzados de Programacion - Unidad 4 programacion concurrenteTopicos Avanzados de Programacion - Unidad 4 programacion concurrente
Topicos Avanzados de Programacion - Unidad 4 programacion concurrente
 
Lps 17 hilos
Lps 17 hilosLps 17 hilos
Lps 17 hilos
 
Thread
ThreadThread
Thread
 
Chap 15apin
Chap 15apinChap 15apin
Chap 15apin
 
Sistemas operativos unidad 2
Sistemas operativos unidad 2Sistemas operativos unidad 2
Sistemas operativos unidad 2
 
Multitarea
MultitareaMultitarea
Multitarea
 
Hilos hebras
Hilos hebrasHilos hebras
Hilos hebras
 
Hilos con Posix
Hilos con PosixHilos con Posix
Hilos con Posix
 
Clase 3 ene 8
Clase 3 ene 8Clase 3 ene 8
Clase 3 ene 8
 
Unidad2
Unidad2Unidad2
Unidad2
 
Cuadro comparativo hilos
Cuadro comparativo hilosCuadro comparativo hilos
Cuadro comparativo hilos
 
Threads
ThreadsThreads
Threads
 
Atix23
Atix23Atix23
Atix23
 
Atix23
Atix23Atix23
Atix23
 
Programación concurrente
Programación concurrenteProgramación concurrente
Programación concurrente
 

Más de Benjamín Joaquín Martínez

Más de Benjamín Joaquín Martínez (20)

Sistemas de detección de intrusiones.pdf
Sistemas de detección de intrusiones.pdfSistemas de detección de intrusiones.pdf
Sistemas de detección de intrusiones.pdf
 
Portafolio ingles.pdf
Portafolio ingles.pdfPortafolio ingles.pdf
Portafolio ingles.pdf
 
Tabla de llamadas para linux x86_64 bits.pdf
Tabla de llamadas para linux x86_64 bits.pdfTabla de llamadas para linux x86_64 bits.pdf
Tabla de llamadas para linux x86_64 bits.pdf
 
Sistema de registro con php
Sistema de registro con phpSistema de registro con php
Sistema de registro con php
 
compiladores6Benjamin133467.pdf
compiladores6Benjamin133467.pdfcompiladores6Benjamin133467.pdf
compiladores6Benjamin133467.pdf
 
Compiladores5_Benjamin133467.pdf
Compiladores5_Benjamin133467.pdfCompiladores5_Benjamin133467.pdf
Compiladores5_Benjamin133467.pdf
 
133467 compiladores 4.pdf
133467 compiladores 4.pdf133467 compiladores 4.pdf
133467 compiladores 4.pdf
 
133467_COMPILADORES3.pdf
133467_COMPILADORES3.pdf133467_COMPILADORES3.pdf
133467_COMPILADORES3.pdf
 
133467_COMPILADORES2
133467_COMPILADORES2133467_COMPILADORES2
133467_COMPILADORES2
 
COMPILADORES1.pdf
COMPILADORES1.pdfCOMPILADORES1.pdf
COMPILADORES1.pdf
 
Algoritmos de búsqueda.pdf
Algoritmos de búsqueda.pdfAlgoritmos de búsqueda.pdf
Algoritmos de búsqueda.pdf
 
Logica proposicional
Logica proposicionalLogica proposicional
Logica proposicional
 
Lenguajes para dispositivos moviles 133467
Lenguajes para dispositivos moviles 133467Lenguajes para dispositivos moviles 133467
Lenguajes para dispositivos moviles 133467
 
Bd distribuidas
Bd distribuidasBd distribuidas
Bd distribuidas
 
diseño de bases de datos distribuidas
diseño de bases de datos distribuidas   diseño de bases de datos distribuidas
diseño de bases de datos distribuidas
 
procesamiento de consultas distribuidas
procesamiento de consultas distribuidasprocesamiento de consultas distribuidas
procesamiento de consultas distribuidas
 
Algoritmo de INGRES
Algoritmo de INGRES Algoritmo de INGRES
Algoritmo de INGRES
 
Fragmentación
FragmentaciónFragmentación
Fragmentación
 
Modelo cliente servidor
Modelo cliente servidorModelo cliente servidor
Modelo cliente servidor
 
Arquitectura de bases de datos distribuidas
Arquitectura de bases de datos distribuidasArquitectura de bases de datos distribuidas
Arquitectura de bases de datos distribuidas
 

Thread

  • 1.
  • 2. QUE ES UN HILO  Un hilo es simplemente una tarea que puede ser ejecutada al mismo tiempo con otra tarea.  Un thread se puede considerar como la agrupación de un trozo de programa junto con el conjunto de registros del procesador que utiliza y una pila de máquina.  El conjunto de los registros y de la pila de cada thread se denomina contexto.  La creación de un nuevo hilo es una característica que permite a una aplicación realizar varias tareas a la vez (concurrentemente).  Los distintos hilos de ejecución comparten una serie de recursos tales como el espacio de memoria, los archivos abiertos, situación de autenticación, etc.  Esta técnica permite simplificar el diseño de una aplicación que debe llevar a cabo distintas funciones simultáneamente.
  • 3.  Los hilos de ejecución que comparten los mismos recursos, sumados a estos recursos, son en conjunto conocidos como un proceso.  El hecho de que los hilos de ejecución de un mismo proceso compartan los recursos hace que cualquiera de estos hilos pueda modificar éstos.  Cuando un hilo modifica un dato en la memoria, los otros hilos acceden a ese dato modificado inmediatamente.  Lo que es propio de cada hilo es el contador de programa, la pila de ejecución y el estado de la CPU (incluyendo el valor de los registros).
  • 4. FUNCIONAMIENTO DE UN HILO  Al igual que los procesos, los hilos poseen un estado de ejecución y pueden sincronizarse entre ellos para evitar problemas de compartición de recursos.  Generalmente, cada hilo tiene una tarea especifica y determinada, como forma de aumentar la eficiencia del uso del procesador.  Estados de un hilo  Los principales estados de los hilos son: Ejecución, Listo y Bloqueado. No tiene sentido asociar estados de suspensión de hilos ya que es un concepto de proceso.  En todo caso, si un proceso está expulsado de la memoria principal (RAM), todos sus hilos deberán estarlo ya que todos comparten el espacio de direcciones del proceso.
  • 5.
  • 6.  Cambio de estados  Creación: Cuando se crea un proceso se crea un hilo para ese proceso. Luego, este hilo puede crear otros hilos dentro del mismo proceso, proporcionando un puntero de instrucción y los argumentos del nuevo hilo. El hilo tendrá su propio contexto y su propio espacio de la columna, y pasará al final de los Listos.  Bloqueo: Cuando un hilo necesita esperar por un suceso, se bloquea (salvando sus registros de usuario, contador de programa y punteros de pila). Ahora el procesador podrá pasar a ejecutar otro hilo que esté al principio de los Listos mientras el anterior permanece bloqueado.  Desbloqueo: Cuando el suceso por el que el hilo se bloqueó se produce, el mismo pasa a la final de los Listos.  Terminación: Cuando un hilo finaliza se liberan tanto su contexto como sus columnas.
  • 7. PROGRAMA DE FLUJO UNICO  Un programa de flujo único, tarea única o mono -hilo (single-thread) utiliza un único flujo de control (thread) para controlar su ejecución.  Muchos programas no necesitan la potencia o utilidad de multiples tareas.  public class HolaMundo{ public static void main (string args[]){ System.out.println( " Hola Mundo " ); } }  Aqui, Cuando se llama al main(), la aplicación imprime el mensaje y termina. Esto ocurre dentro de una única tarea (thread).
  • 8. PROGRAMAS DE FLUJO MÚLTIPLE  un programa multihilo(Flujo múltiple) permite que cada thread comience y termine tan pronto como sea posible.  Este comportamiento presenta una mejor respuesta a la entrada en tiempo real.
  • 9. // Definimos unos sencillos hilos. Se detendrán un rato // antes de imprimir sus nombres y retardos class TestTh extends Thread { private String nombre; private int retardo; // Constructor para almacenar nuestro nombre // y el retardo public TestTh( String s,int d ) { nombre = s; retardo = d; } // El metodo run() es similar al main(), pero para // threads. Cuando run() termina el thread muere public void run() { // Retasamos la ejecución el tiempo especificado try { sleep( retardo ); } catch( InterruptedException e ) { } // Ahora imprimimos el nombre System.out.println( "Hola Mundo! "+nombre+" "+retardo ); } }
  • 10. public class MultiHola { public static void main( String args[] ) { TestTh t1,t2,t3; // Creamos los threads t1 = new TestTh( "Thread 1",(int)(Math.random()*2000) ); t2 = new TestTh( "Thread 2",(int)(Math.random()*2000) ); t3 = new TestTh( "Thread 3",(int)(Math.random()*2000) ); // Arrancamos los threads t1.start(); t2.start(); t3.start(); } }
  • 11. Creación de un hilo  Si la clase está destinada a ser ejecutado como un hilo, se puede lograr esto mediante la implementación de una interfaz Runnable . Usted tendrá que seguir tres pasos básicos
  • 12. Paso 1  Como primer paso, es necesario implementar un método run () proporcionado por Runnable . Este método proporciona un punto de entrada para el hilo y le podemos poner lo que necesitamos dentro del metodo. A continuación se presenta una sintaxis sencilla del método run () -  public void run( )
  • 13. Paso 2  Como segundo paso, una instancia de un hilo objeto mediante el siguiente constructor –  Thread(Runnable threadObj, String threadName);  Cuando, threadObj es una instancia de una clase que implementa Runnable y threadName es el nombre dado al nuevo hilo.
  • 14. Paso 3  Una vez que se crea un objeto Thread, se puede iniciar llamando a start() que realiza una llamada al método run (). A continuación se presenta una sintaxis simple método start ()  void start();