0% encontró este documento útil (0 votos)
136 vistas36 páginas

Teoría de Hilos en Java

Este documento describe la diferencia entre procesos y hilos en Java. Los procesos son independientes y no comparten datos, mientras que los hilos comparten código y datos dentro de un mismo proceso. También explica cómo crear hilos heredando de la clase Thread o implementando la interfaz Runnable, y los métodos para gestionar hilos como start(), join(), sleep(), entre otros.

Cargado por

EM
Derechos de autor
© © All Rights Reserved
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)
136 vistas36 páginas

Teoría de Hilos en Java

Este documento describe la diferencia entre procesos y hilos en Java. Los procesos son independientes y no comparten datos, mientras que los hilos comparten código y datos dentro de un mismo proceso. También explica cómo crear hilos heredando de la clase Thread o implementando la interfaz Runnable, y los métodos para gestionar hilos como start(), join(), sleep(), entre otros.

Cargado por

EM
Derechos de autor
© © All Rights Reserved
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

Hilos en java

Ing. Patricia Del Valle Morales


Introducción

➢ Procesos
Los procesos creados con la llamada fork son denominados como procesos pesados; estos procesos son programas
completos e independientes con sus propias variables, stack, y memoria reservada, lo único que se comparte con el
proceso original es el código.
Cuando creamos un nuevo proceso con fork, creamos una nueva secuencia que se ejecuta concurrentemente con el
proceso padre, pero no comparten las zonas de datos y la comunicación entre ellos es muy limitada. Por ello aparecen
las pipes y los otros mecanismos de comunicación entre procesos.

➢ Hilos
Los hilos son otra forma de crear la posibilidad de concurrencia de actividades; sin embargo, la gran diferencia es que
los hilos comparten el código y el acceso a algunos datos en forma similar a como un objeto tiene acceso a otros
objetos. En Java un hilo es un objeto con capacidad de correr en forma concurrente el método run(). En cierta manera
es como tener dos "program counters" para un mismo código
Esquema general de un hilo:
Estructura de un hilo

Un hilo (proceso ligero) es una unidad básica de utilización de la CPU, y consiste en un contador de
programa, un juego de registros y un espacio de pila.

Los hilos dentro de una misma aplicación comparten:


•La sección de código.
•La sección de datos.
•Los recursos del SO (archivos abiertos y señales).

Un proceso tradicional o pesado es igual a una tarea con un solo hilo.

Los hilos permiten la ejecución concurrente de varias secuencias de instrucciones asociadas a


diferentes funciones dentro de un mismo proceso, compartiendo un mismo espacio de direcciones y
las mismas estructuras de datos del núcleo.
Proceso Monohilo vs Multihilos

En un SO con procesos monohilo , en el que no En un SO con procesos multihilo, sólo hay:


existe el concepto de hilo, la representación de ✓ un PCB y un espacio de direcciones asociados al
un proceso incluye: proceso,

✓ su PCB, Sin embargo, ahora hay:


✓ un espacio de direcciones del proceso, ✓ pilas separadas para cada hilo y
✓ una pila de proceso y una pila núcleo. ✓ bloques de control para cada hilo.
Recursos compartidos y no compartidos

Los hilos permiten la ejecución concurrente de varias secuencias de instrucciones asociadas a diferentes funciones
dentro de un mismo proceso, compartiendo un mismo espacio de direcciones y las mismas estructuras de datos
del núcleo.

Recursos compartidos entre los hilos:


•Código (instrucciones).
•Variables globales.
•Ficheros y dispositivos abiertos.

Recursos no compartidos entre los hilos:


•Contador del programa (cada hilo puede ejecutar una sección distinta de código).
•Registros de CPU.
•Pila para las variables locales de los procedimientos a las que se invoca después de crear un hilo.
•Estado: distintos hilos pueden estar en ejecución, listos o bloqueados esperando un evento.
Concurrencia

Ing. Patricia Del Valle Morales


Primer nivel de concurrencia, donde existen 3 procesos
independientes ejecutándose al mismo tiempo sobre el
Sistema Operativo.
Ing. Patricia Del Valle Morales
No necesariamente un proceso es todo el programa en
ejecución, sino que, al ejecutarse, puede dar lugar a más de
un proceso, cada uno de ellos ejecutando una parte del
programa.

Ing. Patricia Del Valle Morales


¿Qué es la programación
concurrente?

Son los mecanismos de comunicación y


sincronización entre procesos para llevar a cabo las
tareas de colaboración y competencia por los recursos
del sistema.

Ing. Patricia Del Valle Morales


Beneficios de la programación concurrente

1. Velocidad de ejecución
2. Solución de problemas de naturaleza concurrente.

a) Tecnologías web

✓ Servidores web que son capaces de atender concurrentemente


múltiples conexiones de usuarios.
✓ Programas de chat que permiten mantener la conversación de varios
usuarios.
✓ Servidores de correo que permiten que múltiples usuarios puedan
mandar y recibir mensajes al mismo tiempo.
✓ Los Navegadores que permiten que un usuario pueda estar haciendo
una descarga mientras navega por otras páginas, o se ejecuta un
applet de Java, etc.
Ing. Patricia Del Valle Morales
b) Sistemas de control

Captura de datos Análisis Prende la alarma


(sensores) de datos correspondiente

✓La recolección de datos puede hacerse ser desde diversas


entidades físicas como por ejemplo edificios o estancias dentro de
edificios.

✓Tanto la captura de datos, el análisis y posterior actuación son


candidatos a ser procesos distintos y de naturaleza concurrente.

¿Qué pasaría si el problema no plantea como una solución


concurrente?

Ing. Patricia Del Valle Morales


c) Aplicaciones basadas en interfaces de usuarios

◼ La concurrencia en este tipo de aplicaciones va a permitir


que el usuario pueda interactuar con la aplicación aunque
ésta esté realizando alguna tarea que consume mucho
tiempo de procesador.

◼ Un proceso controla la interfaz mientras otro hace la


tarea que requiere un uso intensivo de la CPU.

◼ Esto facilitará que tareas largas puedan ser abortadas a


mitad de ejecución.

Ing. Patricia Del Valle Morales


d) Ejemplos propuestos por los alumnos

Ing. Patricia Del Valle Morales


¿Qué se puede ejecutar concurrentemente?

Condiciones de Bernstein
Para poder determinar si dos conjuntos de instrucciones se pueden ejecutar de
forma concurrente, se definen en primer lugar los siguientes conjuntos:

L (Sk) = {a1, a2, ... , an}, como el conjunto de lectura del conjunto de
instrucciones Sk y que está formado por todas las variables cuyos valores son
referenciados (se leen) durante la ejecución de las instrucciones en Sk.

E (Sk) = {b1, b2, ... , bm}, como el conjunto de escritura del conjunto de
instrucciones Sk y que está formado por todas las variables cuyos valores son
actualizados (se escriben) durante la ejecución de las instrucciones en Sk.

Ing. Patricia Del Valle Morales


Para que dos conjuntos de instrucciones Si y Sj se puedan
ejecutar concurrentemente, se tiene que cumplir que:

1. L(Si) ∩ E(Sj) = ∅
2. E(Si) ∩ L(Sj) = ∅
3. E(Si) ∩ E(Sj) = ∅

Ing. Patricia Del Valle Morales


Ejemplo: S1 → a := x+y;
S2 → b := z-1;
S3 → c := a-b;
S4 → w := c+1;
◼ Calculamos los conjuntos de lectura y escritura:
L (S1) = {x, y} E (S1) = {a}
L (S2) = {z} E (S2) = {b}
L (S3) = {a, b} E (S3) = {c}
L (S4) = {c} E (S4) = {w}
◼ Aplicamos las condiciones de Bernstein a cada par de
sentencias:

Ing. Patricia Del Valle Morales


Grafos de precedencia

S1 S2

S3

S4
Ing. Patricia Del Valle Morales
Problema

◼ Usando las condiciones de Bernstein, construir el grafo


de precedencia del siguiente trozo de código.

S1: cuad := x*x;


S2: m1 := a*cuad;
S3: m2 := b*x;
S4: z := m1 + m2;
S5: y := z + c;

Ing. Patricia Del Valle Morales


Hilos en java

Ing. Patricia Del Valle Morales


Hilos y objetos

▀ Sólo hay un hilo que va recorriendo los objetos según se van


produciendo las llamadas entre métodos de los objetos.

Ing. Patricia Del Valle Morales


◼ El programa se está ejecutando al mismo tiempo por tres sitios
distintos: el hilo principal, más los dos hilos creados.

◼ Los hilos pueden estar ejecutando código en:


– Diferentes objetos,
– Código diferente en el mismo objeto, o incluso
– El mismo código en el mismo objeto y al mismo tiempo.
Ing. Patricia Del Valle Morales
Creación de hilos

Existen 2 formas de trabajar con hilos en cuanto


a su creación se refiere:

a) Heredando de la clase Thread

b) Implementando la interfaz Runnable

Ing. Patricia Del Valle Morales


Clase thread (atributos)

Ing. Patricia Del Valle Morales


Clase thread (constructores)

Ing. Patricia Del Valle Morales


Clase thread (Métodos)

Ing. Patricia Del Valle Morales


Clase thread (Métodos)

Ing. Patricia Del Valle Morales


Clase thread (Métodos)

Ing. Patricia Del Valle Morales


Creación de threds

a) Clase Thread
1. Se crea una subclase de la clase Thread
2. Se define un método run() para ella
3. Se crea una instancia de ella
4. Y se ejecuta el método start().
b) Interfaz Runnable
1. Se crea una clase que implementa la interfaz
Runnable
2. Se define un método run() en ella
3. Se crea una instancia con esta interfaz Runnable
como argumento
4. Y se ejecuta el método start().
Creación de un hilo con Thread
class MyThread extends Thread {
…….

public void run() {


……..
//trabajo del hilo
……
}
}

……

Thread t = new MyThread();


t.start();
Estados de un hilo en Java

Ing. Patricia Del Valle Morales


Ing. Patricia Del Valle Morales
◼ Nuevo:
Es el estado en el que se encuentra un hilo cuando se
crea con el operador new.

◼ Listo:
Pasa a este estado al llamar al método start().

◼ Ejecución:
Pasa al estado de ejecución cuando el planificador le
asigna el procesador

Ing. Patricia Del Valle Morales


Planificación y prioridades

◼ Todos los hilos de Java tienen una prioridad y se supone


que el planificador dará preferencia a aquel hilo que
tenga una prioridad más alta. Sin embargo, no hay
ningún tipo de garantía

◼ Las rodajas de tiempo pueden ser aplicadas o no.


Dependerá de la gestión de hilos que haga la librería
sobre el que se implementa la máquina virtual java.

◼ Se debe asumir que los hilos pueden intercalarse en


cualquier punto en cualquier momento.

Ing. Patricia Del Valle Morales


◼ Las prioridades de cada hilo en Java están en el rango
de 1 (MIN_PRIORITY) a 10 (MAX_PRIORITY).

◼ La prioridad de un hilo es inicialmente la misma que la


del hilo que lo creó, por defecto todo hilo tiene la
prioridad 5 (NORM_PRIORITY).

◼ El planificador siempre pondrá en ejecución aquel hilo


con mayor prioridad.

◼ Los hilos de prioridad inferior se ejecutarán cuando


estén bloqueados los de prioridad superior.

Ing. Patricia Del Valle Morales


◼ Las prioridades se pueden cambiar utilizando el método
setPriority (nuevaPrioridad).

◼ El método getPriority() devuelve la prioridad de un hilo.

◼ El método yield()hace que el hilo actualmente en


ejecución ceda el paso de modo que puedan ejecutarse
otros hilos listos para ejecución. El hilo elegido puede
ser incluso el mismo que ha dejado paso, si es el de
mayor prioridad.

◼ El método stop() detiene la ejecución del hilo.

Ing. Patricia Del Valle Morales

También podría gustarte