Documentos de Académico
Documentos de Profesional
Documentos de Cultura
FACULTAD DE INGENIERAS
INGENIERA DE SISTEMAS
ARQUITECTURA CLIENTE SERVIDOR
OBJETIVOS
Explicar el entorno de programacin de java.
Desarrollar aplicaciones de base de datos en java.
LABORATORIO
1
Mgter. Juan Pablo Apaza Condori.
THREADS
TEMAS
Entorno de programacin java.
Threads
Multi-threads.
Sincronizacin.
Programacin de threads
Demonios.
SocketServer
MARCO TERICO
EL ESTADO DEL THREAD
El siguiente diagrama ilustra los distintos estados que puede tener un Thread Java en cualquier
momento de su vida. Tambin ilustra las llamadas a mtodos que provocan las transiciones de un
estado a otro.
SINCRONIZACIN DE THREADS
La sincronizacin es la forma en que se puede evitar que dos datos corruptos accedan a la vez al
mismo dato.
/*synchronized */ //Palabra reservada.
Como los thread de un programa comparten el mismo espacio de memoria, se puede dar el caso en
que dos threads traten de acceder a la vez al mismo objeto.
Start permite al hilo pasar al estado listo y empieza a ejecutar su mtodo run
Cuando el mtodo run se completa el estado del hilo pasa a muerto.
Wait cambia el estado del hilo al estado de espera.
Notify cambia el estado de un hilo al estado listo
Sleep cambia el estado del hilo a estado inactivo por un periodo que se especifica en milisegundos.
Join si un subproceso no puede seguir ejecutndose (dependiente) a menos que otro subproceso
termine, el subproceso dependiente llamara al mtodo join del otro subproceso para unir los dos
subprocesos. Cuando se unen dos subprocesos, el que es dependiente sale del estado en espera
cuando el otro termina su ejecucin.(muerto)
ACTIVIDADES
Analizar y explicar el funcionamiento de .cada uno de los ejemplos.
EJEMPLO 1
Implemente en Java lo siguiente
SOLUCIN
= new PrimerThread(this);
}
catch (InterruptedException e)
{
}
}
}
EJEMPLO 2
Implemente en Java lo siguiente
SOLUCIN
1 Disear la siguiente pantalla
10
11
import java.util.Random;
import java.util.Vector;
public class frm_notas extends javax.swing.JFrame {
private Vector listData1 = new Vector();
private Vector listData2 = new Vector();
PrimerThread primer = new PrimerThread(this);
SegundoThread segundo = new SegundoThread(this);
/**
* Creates new form frm_notas
*/
public frm_notas() {
initComponents();
}
12
int n = Integer.parseInt(obj_x.txt_n.getText());
int nota;
listData1.clear();
Random rand = new Random();
for (int i = 0; i < n; i++) {
nota =rand.nextInt(100000%21);
synchronized(obj_x.listData1){
13
obj_x.listData1.addElement(Integer.toString(nota));
}
obj_x.lst_liebre.setListData( listData1 );
sleep(500); //0.5 segundo
}
//PruebaEstados.salida.println ("
} catch (InterruptedException e) {
}
}
}
class SegundoThread extends Thread {
frm_notas obj_x;
public SegundoThread(frm_notas obj) {
obj_x = obj;
//super(str);
}
public void run() {
try {
//PruebaEstados.salida.println ("
int n = Integer.parseInt(obj_x.txt_n.getText());
int nota;
listData2.clear();
Random rand = new Random();
for (int i = 0; i < n; i++) {
nota =rand.nextInt(100000%21);
;
synchronized(obj_x.listData2){
obj_x.listData2.addElement(Integer.toString(nota));
}
obj_x.lst_tortuga.setListData( listData2 );
sleep(1500); //0.5 segundo
}
//PruebaEstados.salida.println ("
//PruebaEstados.salida.println ("
} catch (InterruptedException e) {
}
}
}
14
15
EJEMPLO 2
Implemente en Java lo siguiente
SOLUCIN
package javaapplication9;
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author Juan
*/
import java.util.Random;
import java.util.Vector;
public class frm_notas extends javax.swing.JFrame {
private Vector listData1 = new Vector();
private Vector listData2 = new Vector();
private Vector listData3 = new Vector();
PrimerThread primer = new PrimerThread(this);
SegundoThread segundo = new SegundoThread(this);
TercerThread tercer = new TercerThread(this);
/**
16
int n = Integer.parseInt(obj_x.txt_n.getText());
int nota;
listData1.clear();
Random rand = new Random();
for (int i = 0; i < n; i++) {
nota =rand.nextInt(100000%21);
;
synchronized(obj_x.listData1){
obj_x.listData1.addElement(Integer.toString(nota));
obj_x.lst_liebre.setListData( listData1 );
}
sleep(500); //0.5 segundo
}
//obj_x.listData1.addElement("-----");
//obj_x.lst_liebre.setListData( listData1 );
//PruebaEstados.salida.println ("
} catch (InterruptedException e) {
}
synchronized (tercer)
{
obj_x.tercer.notify();
}
}
}
class SegundoThread extends Thread {
frm_notas obj_x;
public SegundoThread(frm_notas obj) {
obj_x = obj;
//super(str);
}
public void run() {
try {
//PruebaEstados.salida.println ("
int n = Integer.parseInt(obj_x.txt_n.getText());
int nota;
listData2.clear();
Random rand = new Random();
for (int i = 0; i < n; i++) {
nota =rand.nextInt(100000%21);
;
synchronized(obj_x.listData2){
17
obj_x.listData2.addElement(Integer.toString(nota));
}
obj_x.lst_tortuga.setListData( listData2 );
sleep(1500); //0.5 segundo
}
//PruebaEstados.salida.println ("
//PruebaEstados.salida.println ("
} catch (InterruptedException e) {
}
}
}
class TercerThread extends Thread {
frm_notas obj_x;
public TercerThread(frm_notas obj) {
obj_x = obj;
//super(str);
}
public void run() {
try {
//PruebaEstados.salida.println ("
synchronized (this)
{
this.wait();;
}
int n =obj_x.listData1.size();
int nota;
listData3.clear();
int suma=0;
for (int i = 0; i < n; i++) {
nota=Integer.parseInt((String)obj_x.listData1.elementAt(i));
suma = suma + nota;
//sleep(1000); //1 segundo
}
obj_x.txt_suma_liebre.setText(Integer.toString(suma));
//PruebaEstados.salida.println ("
//PruebaEstados.salida.println ("
} catch (InterruptedException e) {
}
}
}
}
18
EJERCICIOS
19
2 Realizar un programa en Java con 3 hebras, cada una de las cuales escribe por pantalla varias
veces (valor pasado como parmetro en el constructor) el carcter que se le indique (tambin
indicado como parmetro). Se mezclan las letras? Justifica el comportamiento observado.
b) Modificar el programa de la siguiente manera: se van a mostrar las letras A, B y C. Para ello,
utilizaremos 3 hebras como en el caso anterior, pero queremos limitar la posible salida de caracteres
por pantalla para que no se produzca de cualquier forma sino con la secuencia indefinida: ABBCCC,
esto es, por ejemplo: ABBCCCABBCCCABBCCC...
Se recomienda la utilizacin de una variable compartida por las hebras que sirva para asignar
turnos, de manera que cada hebra imprime su letra cuando sea su turno. De esta forma, cuando se
crean las hebras, a cada una se le asigna un identificador para que puedan comprobar cuando es su
turno, y que mientras no sea su turno, no hagan nada (ej: while (turno != miid) ; )
3 Modificar el cdigo de la clase PingPong vista como ejemplo en las primeras diapositivas, para
obtener la siguiente salida:
PpPpPpPpPp...
Se necesitar hacer uso de synchronized, wait y notify
Cuidado con el interbloqueo y la eleccin del testigo
20
3. Se tiene tres cajeros en el rea de atencin al cliente de un Banco, se desea simular la atencin al
cliente utilizando MULTI-THREADS , SINCRONIZACIN, PROGRAMACIN DE THREADS Y
DEMONIOS.
Existen 3 tipos de clientes:
Eventuales (Prioridad 1).
ClientesFijos
(Prioridad 3).
Especiales
(Prioridad 5).
El tiempo de demora en atender a un cliente esta en el rango de 5 y 200 milisegundos.
Simular la atencin de 2000 clientes.
21