Hilos
• CONCEPTO: Un Hilo (Thread en Ingles) es un subprograma que se invoca
a través de la ejecución de un programa principal y a partir de allí se
considera independiente.
Otras definiciones:
“La Máquina Virtual Java (JVM) es un sistema multithread.Es decir, es capaz
de ejecutar varias secuencias de ejecución (programas) simultáneamente.
La JVM gestiona todos los detalles, asignación de tiempos de ejecución,
prioridades, etc, de forma similar a como gestiona un Sistema Operativo
múltiples procesos. La diferencia básica entre un proceso de Sistema
Operativo y un Thread Java es que los Threads corren dentro de la JVM,
que es un proceso del Sistema Operativo y por tanto comparten todos los
recursos, incluida la memoria y las variables y objetos allí definidos. A este
tipo de procesos donde se comparte los recursos se les llama a veces
'procesos ligeros' (lightweight process).”
Diagrama de estados
• Como se presenta el anterior diagrama se determina que un Hilo
puede tener 4
• estados básicos:
• Creado
• En ejecución
• Detenido
• Muerto
• Para pasar de un estado a otro se requiere la ejecución de un
método en
• particular definido en la clase Thread.
• Estos son :
• · new
• · start()
• · yield()
• · speep()
• · Ejecución del método run()
Ejemplo del codigo java
•
•
•
•
•
1. Inicio de programa principal
2. Invocación de un método en un hilo
3. Invocación de un método de una clase
4. Invocación de un método en la misma clase
5. Fin del programa principal
Fase 1
•
•
•
•
•
•
public class Programa
{
public void metodo()
{
for(int i=0;i<10;i++)
System.out.println("Clase programa metodo
metodo" +i);
• }
• }
•
•
•
•
•
•
public class Prueba
{
public static void main(String args[])
{
System.out.println("inicio main");
System.out.println("fin main");
• }
• }
Ejecución
•
•
•
•
•
•
•
•
•
•
public class Prueba
{
public static void main(String args[])
{
System.out.println("inicio main");
Programa p=new Programa();
p.metodo();
System.out.println("fin main");
}
}
Fase 2
• public class Prueba
• {
• public static void main(String args[])
• {
• System.out.println("inicio main");
• Programa p=new Programa();
• p.metodo();
• metodo();
• System.out.println("fin main");
• }
• public static void metodo()
• {
• for(int i=0;i<10;i++)
• System.out.println("Clase prueba metodo metodo" +i);
• }
• }
La línea metodo() es la invocación del método de la misma clase.
El resultado es el siguiente:
Fase 3
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
En esta fase vamos a incluir el código de un hilo, creamos la clase Hilo
heredando de Thread.
public class Hilo extends Thread
{
public Hilo()
{
}
private void metodo()
{
for(int i=0;i<10;i++)
System.out.println("Clase hilo y metodo metodo"+i);
}
public void run()
{
metodo();
}
}
• Hilo h1=new Hilo();
• h1.start();
• En la invocación recordemos que en diagrama de
estados para crear se utiliza un método new, tal
como se ve en la línea (1), tengamos presente
que Hilo hereda de Thread.
• En la segunda línea tenemos el inicio del hilo
método start() y este debe llamar de manera
automática el método run() según el diagrama de
• estados.
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
public class Prueba
{
public static void main(String args[])
{
System.out.println("inicio main");
Hilo h1=new Hilo();
h1.start();
Programa p=new Programa();
p.metodo();
metodo();
System.out.println("fin main");
}
public static void metodo()
{
for(int i=0;i<10;i++)
System.out.println("Clase prueba metodo metodo" +i);
}
}
• La ejecución no siempre es el mismo valor ya
que no depende del la línea principal, son
independientes y se ejecutan según
• prioridades sobre la maquina virtual y así
mismo sobre el procesador.
Descargar

hilos