Uso de clase Thread parte 2
Viruz Blog :: Programación en General :: Java :: Básicos
Página 1 de 1.
Uso de clase Thread parte 2
Siguiendo con el tema de Threads en la primera parte se aprendió sobre el método que le da inicio a un hilo start() así como la sincronización de un método (synchronized) y el método abstracto al implementar la interfaz Runnable run().
Hoy conoceremos otro programa en el cual se verán los siguientes puntos:
Enlace: Uso de clase Thread (Parte 2)
Hoy conoceremos otro programa en el cual se verán los siguientes puntos:
- El uso del método charAt().
- El método wait(): Deja bloqueado el hilo que lo llama.
- El método notify(): Desbloquea o activa con una notificación el hilo que se bloquea con el método wait().
- Sincronización de métodos (set y get) que en el caso de ejemplo serán (depositar y retirar).
- Como crear un hilo heredando de la clase Thread.
- Uso de clase Threads (Parte 1)
- En esta ocasión empezaré por la clase Deposito el cual se observa que hereda de Thread es otra forma de crear un hilo y en su método run() se realiza un ciclo for() donde se harán 10 depósitos.
- Dentro de este ciclo se ocupará el método charAt() que se encarga de escoger una letra al azar con Math.ramdom() de una cadena de String declarada anteriormente. Y posteriormente se realiza un deposito de esta letra.
- Caso contrario en la clase Retiro dentro del método run() se realiza otro ciclo for() donde solo se llamará al método retirar() el cual es un método get() por lo que nos devolverá el carácter antes depositado.
- En la clase Operacion primeramente sincronizamos los métodos mencionados anteriormente y mediante una bandera y un ciclo while() se indicará que primero se deposita antes de retirar.
- Por último si se realiza un depósito o retiro se usará el método wait() el cual pausará para no volver hacer la operación nuevamente y notify() para poder activarlo de nuevo cuando este se desocupe.
/**
*
* @author Jesus Ivan
*/
public class Deposito extends Thread {
private Operacion operacion;
private final String letras ="abcdefghijklmnñopqrstuvxyz";
public Deposito(Operacion operacion) {
this.operacion = operacion;
}
@Override
public void run() {
for (int i=0; i<10; i++) {
//charAt devuelve el carácter que está situado en la posición indicada.
//Extrae un caracter de un String. charAt es de la clase String.
char c=letras.charAt((int)(Math.random()* letras.length()));
System.out.println(i +" Depósito: "+ c);
operacion.depositar(c);
try {
sleep(400);
} catch (InterruptedException e) {}
}
}
}
Clase Retiro
/**
*
* @author Jesus Ivan
*/
public class Retiro extends Thread {
private Operacion operacion;
public Retiro(Operacion operacion) {
this.operacion = operacion;
}
@Override
public void run() {
char valor;
for (int i=0; i<10; i++) {
valor = operacion.retirar();
System.out.println(" Retiro "+i+ ": "+ valor);
try {
sleep(100);
} catch (InterruptedException e) {}
}
}
}
Clase Operacion
/**
*
* @author Jesus Ivan
*/
public class Operacion {
private char contenido;
private boolean disponible = false;
public Operacion() {
}
public synchronized char retirar() {
//Mientras disponible tenga un parametro negrativo ! osea este en falso.
while (!disponible) {
try {
wait();
} catch (InterruptedException e) {}
}
disponible=false;
notify();
return contenido;
}
public synchronized void depositar(char valor) {
//Mientras el valor disponible se encuentre en estado verdadero.
while (disponible) {
try {
wait();
} catch (InterruptedException e) {}
}
contenido = valor;
disponible = true;
notify();
}
}
Clase Main
/**
*
* @author Jesus Ivan
*/
public class Main {
public static void main(String [] args) {
Operacion b = new Operacion();
Deposito p = new Deposito(b);
Retiro c = new Retiro(b);
p.start();
c.start();
}
}
Descarga el código
Uso de Threads (Parte 2)
Autor: Viruz Uso de Threads (Parte 2)
Enlace: Uso de clase Thread (Parte 2)
Temas similares
» Uso de clase Thread parte 1
» Uso de clase Scanner
» Uso de JApplet parte 1
» Uso de clase Component
» Dibujo de rectángulo con clase Scanner
» Uso de clase Scanner
» Uso de JApplet parte 1
» Uso de clase Component
» Dibujo de rectángulo con clase Scanner
Viruz Blog :: Programación en General :: Java :: Básicos
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.