3.programacion Concurrente
3.programacion Concurrente
3.programacion Concurrente
Programación
Programa:
Conjunto de sentencias/instrucciones que se ejecutan
secuencialmente. Se asemeja al concepto de clase dentro de la
POO. Es por tanto un concepto estático.
Proceso:
Básicamente, se puede definir como un programa en ejecución.
Líneas de código en ejecución de manera dinámica. Se asemeja al
concepto de objeto en POO.
Programación Concurrente
Hilo / Thread
Un hilo es un proceso que se ejecuta en un contexto diferente y
simultáneamente al que lo crea. es decir, crea un subproceso.
h1 h2 h3 h4 h5 hn thread
h6
Sistema Operativo
Adquiere bloqueo
Se completa E/S
Interrupt
El intervalo expira
Wait Notify
slepp notifyAll
Ciclo de vida de hilos
Un nuevo subproceso empieza su ciclo cuando hace la
transición al estado nuevo; permanece en este estado hasta
que el programa inicia el subproceso, con lo cual se coloca en el
estado ejecutable.
Se considera que un subproceso en el estado ejecutable está
ejecutando su tarea.
subproceso1.setName("Subproceso1");
subproceso2.setName("Subproceso2");
subproceso3.setName("Subproceso3");
System.out.println("Iniciando Procesos...");
subproceso1.start();
subproceso2.start();
subproceso3.start();
System.out.println("Procesos Iniciados...");
}
}
Practica Hilos1 (java)
package hilos;
public void imprimir() {
import java.util.Random;
Thread actual = Thread.currentThread();
import java.util.logging.Level;
System.out.println(actual.getName()+
import java.util.logging.Logger;
" va estar inactivo "+tiempoInactividad+
public class ImpresoraMensajes extends Thread{ " milisegundos");
try {
private final int tiempoInactividad; Thread.sleep(tiempoInactividad);
private static final Random aleatorio = } catch (InterruptedException ex) {
new Random();
Logger.getLogger(
public ImpresoraMensajes() {
ImpresoraMensajes.class.getName()).
tiempoInactividad = aleatorio.nextInt(6001);
} log(Level.SEVERE, null, ex);
}
@Override System.out.println(actual.getName()+
public void run() { " Dejo de estar inactivo ");
imprimir(); }
}
}
Hilos2 (java)
Vamos a simular el proceso de cobro de un supermercado; es decir, unos
clientes van con un carro lleno de productos y una cajera les cobra los
productos, pasándolos uno a uno por el escáner de la caja registradora.
En este caso la cajera debe de procesar la compra cliente a cliente, es
decir que primero le cobra al cliente 1, luego al cliente 2 y así
sucesivamente.
Para ello vamos a definir una clase "Cajera" y una clase "Cliente" el cual
tendrá un "array de enteros" que representaran los productos que ha
comprado y el tiempo que la cajera tardará en pasar el producto por el
escaner; es decir, que si tenemos un array con [1,3,5] significará que el
cliente ha comprado 3 productos y que la cajera tardara en procesar el
producto 1 '1 segundo', el producto 2 '3 segundos' y el producto 3 en '5
segundos', con lo cual tardara en cobrar al cliente toda su compra '9
segundos'.
Practica_Subprocesos2
Elaborar un Formulario, que contenga 2 botones, uno se llamara
btIniciar y el segundo btMostrar, una barra de Procesos que
mostrara el avance de la consulta. La acción del primer botón
consistirá en simular la espera de una consulta a la BD, un
aproximado de 4 segundos y posteriormente enviar un mensaje
de transacción concluida a través de un Mensaje emergente
(JOptionPane), Al momento de iniciar el evento del botón Iniciar
Proceso, también se deberá mostrar el avance del proceso a
través de una etiqueta lbProceso ubicada en la parte superior de
la barra de proceso.
4.4 Sincronización de Hilos.
Una de las ventajas de utilizar varios subprocesos en una aplicación es
que cada subproceso se ejecuta de forma asincrónica.
En las aplicaciones para Windows, esto permite realizar las tareas que
exigen mucho tiempo en segundo plano mientras la ventana de la
aplicación y los controles siguen respondiendo.