Threads - PowerPoint PPT Presentation

1 / 11
About This Presentation
Title:

Threads

Description:

Dentro de un programa pueden haber varios threads abiertos ... ejemplo, est durmiendo. 5. Ejecuci n. 0 Hola. 0 Adios. 1 Adios. 1 Hola. 2 Hola. 2 Adios. 3 Adios ... – PowerPoint PPT presentation

Number of Views:58
Avg rating:3.0/5.0
Slides: 12
Provided by: arantx
Category:

less

Transcript and Presenter's Notes

Title: Threads


1
Threads
2
Threads
  • Un thread es un contexto de ejecución, proceso
    ligero o tarea. Dentro de un programa pueden
    haber varios threads abiertos
  • Un thread es un proceso ligero en donde hay un
    flujo secuencial de control y que utiliza los
    recursos disponibles para un programa
  • Al ejecutar un programa Java pueden haber varios
    threads ejecutándose (manejo de eventos, main,
    ...)

3
Ciclo de vida de un thread
  • Se puede pasar a Not Runnable ejecutando
    sleep(....)
  • Métodos start() y run()

4
Un modo de crear Threads
  • Crear subclase de java.lang.Thread, haciendo
    overriding del método run de la clase Thread
  • public void run()
  • Un ejemplo un thread para calcular números
    primos
  • class TreadDePrimos extends Thread
  • long primoMinimo
  • ThreadDePrimos (long primoMinimo)
  • this.primoMinimo primoMinimo
  • public void run()
  • // calcular números primos
  • // mayores que primoMinimo
  • . . .

5
Ejemplo
class EjemploDosHilos
public static void main (String args)
new HiloSencillo
(Hola").start() new
HiloSencillo(Adios").start()
class
HiloSencillo extends Thread
public HiloSencillo (String str)
super(str)
public void run()
for (int i 0 i lt 10 i)
System.out.println(i " "
getName()) try
sleep((int)(Math.random(
) 1000)) catch
(InterruptedException e)
System.out.println(FINA
L " getName())
// Método sleep es static //
InterruptedException se lanza cuando a un
thread // se le interrumpe (método interrupt())
cuando, por // ejemplo, está durmiendo
6
Ejecución

0 Hola 0 Adios 1
Adios 1 Hola 2 Hola
2 Adios 3 Adios 3 Hola
4 Hola 4 Adios 5 Hola
5 Adios 6 Adios 6 Hola
7 Hola 7 Adios 8
Adios 9 Adios 8 Hola
FINAL Adios 9 Hola FINAL
Hola
7
Otro modo de crear Threads
  • Interface java.lang.Runnable
  • public interface Runnable
  • public void run()
  • Dos constructores en java.lang.Thread
  • Thread(Runnable)
  • Thread(Runnable, String nombre)
  • Modo
  • Crear clase que implemente la interface
    java.lang.Runnable y generar una instancia de
    Thread a partir de alguno de esos constructores.
  • Por tanto, hay que definir el método run en la
    clase que implemente la interfaz Runnable

8
Ejemplo
  • class HiloSencillo implements Runnable
  • private String nombre
  • public HiloSencillo(String str)
  • this.nombrestr
  • public String getName ()
  • return this.nombre
  • public void run()
  • for (int i 0 i lt 10 i)
  • System.out.println(i " "
    getName())
  • try
  • Thread.sleep((int)(Math.random()
    1000))
  • catch (InterruptedException e)
  • System.out.println("FINAL "
    getName())
  • public class Ejemplo

9
Multitarea en threads
  • Los threads permiten realizar tareas
    simultáneamente
  • Cuando hay una sola CPU, se produce una
    planificación para crear la sensación de
    simultaneidad
  • Java utiliza un algoritmo de planificación
    según prioridades sobre threads en estado
    Runnable
  • Siempre selecciona aquel que tenga una mayor
    prioridad
  • Si todos los threads en estado runnable tienen
    la misma prioridad, los ejecuta alternativamente
  • Cuando se tiene
  • MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY
  • public final void setPriority(int newPriority)
  • Daemon Threads
  • public final void setDaemon(boolean on)

10
Multitarea en threads (cont)
  • La alternancia entre threads se puede producir
  • Según trozos de tiempo asignados por el sistema
    operativo como Windows (time-slicing)
  • Alternancia entre bloques de sentencias (se
    pueden tener threads egoístas cuando por
    ejemplo aparecen bucles)
  • Prioridades para threads
  • Thread.MAX_PRIORITY, Thread.MIN_PRIORITY,
    Thread.NORM_PRIORITY
  • Java siempre elige de entre los threads en estado
    Runnable aquél que tiene mayor prioridad

11
Sincronización
  • A veces es también necesario una sincronización
    entre threads (uso de synchronized) que acceden
    a un mismo recurso compartido.
  • Si un método f es synchronized en un objeto,
    ningún otro método sincronizado (llamado por otro
    hilo) en el mismo objeto se puede llamar hasta
    que f termine.
  • Ejemplo en la clase java.util.Vector (que es una
    versión con sincronizaciones de
    java.util.ArrayList)
  • public final synchronized void addElement(Object
    obj)
  • public final synchronized boolean
    removeElement(Object obj)
  • Métodos wait(), wait(long), notify(), notifyAll()
    llamados desde métodos synchronized, y
    definidos en clase Object
  • wait() pasa el current thread a estado Not
    Runnable
  • notify(), notifyAll() pasan a estado Runnable
    los threads que pasaron a estado Not Runnable
    al ejecutar wait()
Write a Comment
User Comments (0)
About PowerShow.com