Está en la página 1de 21

UNIVERSIDAD ANDINA NSTOR CCERES VELSQUEZ

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.

Mgter. Juan Pablo Apaza Condori.

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)

Mgter. Juan Pablo Apaza Condori.

ACTIVIDADES
Analizar y explicar el funcionamiento de .cada uno de los ejemplos.
EJEMPLO 1
Implemente en Java lo siguiente

SOLUCIN

Mgter. Juan Pablo Apaza Condori.

Mgter. Juan Pablo Apaza Condori.

public static void main (String arg[])


{
frm_hilos obj = new frm_hilos();
obj.setVisible(true);
}

Mgter. Juan Pablo Apaza Condori.

Modificar las propiedades Max y Min

private void btn_iniciar_actionPerformed(ActionEvent e) {


int d=Integer.parseInt(txt_distancia.getText());
pro_bar_hilo1.setMaximum(d);
pro_bar_hilo2.setMaximum(d);
PrimerThread primer
primer.start();

= new PrimerThread(this);

SegundoThread segundo = new SegundoThread(this);


segundo.start();

class PrimerThread extends Thread


{
frm_hilos obj_x;
public PrimerThread(frm_hilos obj)
{
obj_x=obj;
//super(str);
}
public void run()
{
try
{
//PruebaEstados.salida.println (" Primer Thread Inicia.");
int v=Integer.parseInt(obj_x.txt_v1.getText());
for(int i=0;i<60;i++)
{
obj_x.pro_bar_hilo1.setValue(v*i);
sleep (1000);
}
//PruebaEstados.salida.println (" Primer thread Termina.");

Mgter. Juan Pablo Apaza Condori.

}
catch (InterruptedException e)
{
}
}
}

class SegundoThread extends Thread


{
frm_hilos obj_x;
public SegundoThread (frm_hilos obj)
{
obj_x=obj;
//super(str);
}
public void run()
{
try
{
//PruebaEstados.salida.println (" Primer Thread Inicia.");
int v=Integer.parseInt(obj_x.txt_v2.getText());
for(int i=0;i<60;i++)
{
obj_x.pro_bar_hilo2.setValue(v*i);
sleep (1000);
}
//PruebaEstados.salida.println (" Primer thread Termina.");
}
catch (InterruptedException e)
{
}
}
}

Mgter. Juan Pablo Apaza Condori.

Mgter. Juan Pablo Apaza Condori.

EJEMPLO 2
Implemente en Java lo siguiente

SOLUCIN
1 Disear la siguiente pantalla

Mgter. Juan Pablo Apaza Condori.

10

Mgter. Juan Pablo Apaza Condori.

11

2 Modificar la propiedad model del ListBox

3 Agregar la clase til

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();
}

Mgter. Juan Pablo Apaza Condori.

12

4 Agregar el evento al botn Generar

private void btn_generar_actionPerformed(ActionEvent e) {


//try
//{
primer.start();
//primer.join();
segundo.start();
//}
//catch (InterruptedException ex) {
//}
}

class PrimerThread extends Thread {


frm_notas obj_x;
public PrimerThread(frm_notas obj) {
obj_x = obj;
//super(str);
}
public void run() {
try {
//PruebaEstados.salida.println ("

Primer Thread Inicia.");

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){

Mgter. Juan Pablo Apaza Condori.

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) {
}

Primer thread Termina.");

}
}
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 ("

Primer Thread Inicia.");

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) {
}

Primer thread Termina.");


Primer thread Termina.");

}
}

Mgter. Juan Pablo Apaza Condori.

14

Mgter. Juan Pablo Apaza Condori.

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);
/**

Mgter. Juan Pablo Apaza Condori.

16

* Creates new form frm_notas


*/
public frm_notas() {
initComponents();
}
private void btn_generarActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
primer.start();
//primer.join();
segundo.start();
tercer.start();
}
/**
* @param args the command line arguments
*/
class PrimerThread extends Thread {
frm_notas obj_x;
public PrimerThread(frm_notas obj) {
obj_x = obj;
//super(str);
}
public void run() {
try {
//PruebaEstados.salida.println ("

Primer Thread Inicia.");

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) {
}

Primer thread Termina.");

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 ("

Primer Thread Inicia.");

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){

Mgter. Juan Pablo Apaza Condori.

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) {
}

Primer thread Termina.");


Primer thread Termina.");

}
}
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 ("

Primer Thread Inicia.");

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) {
}

Primer thread Termina.");


Primer thread Termina.");

}
}
}

Mgter. Juan Pablo Apaza Condori.

18

EJERCICIOS

1 Implementar la siguiente aplicacin usando hilos.

2 Implementar la siguiente aplicacin usando hilos.

Mgter. Juan Pablo Apaza Condori.

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

Mgter. Juan Pablo Apaza Condori.

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.

Mgter. Juan Pablo Apaza Condori.

21

También podría gustarte