Ir al contenido principal

Sincronizacion de Metodos compartidos por Hilos en java


















Aqui les dejo un ejemplo de como sincronizar un metodo que esta sindo utilizado por dos hilos "Simultaneamente" es muy bueno...

solo debemos crear una clase llamada Cajero, copias y pegas este codigo y listo...
/**
*
* @author Jeison Nisperuza
*/
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
import java.io.PrintWriter;
import javax.swing.JOptionPane;


public class Cajero extends Applet implements ActionListener{
static int balance =0;
int saldoini=0;
int vconsigna1=0;
int vconsigna2=0;
//declaracion de componentes:
Button boton1 = new Button("CONSIGNACION MULTIPLE");
TextField cuenta1 = new TextField(10);
TextField cuenta2 = new TextField(10);
static TextArea ta = new TextArea(20,20);
Label l1 = new Label("Monto Consig 1.");
Label l2 = new Label("Monto Consig 2.");
Label l3 = new Label("Progreso...");

public void init(){
//implemento los componentes:
setLayout(new GridLayout(0,1));
add(l1);
add(cuenta1);
add(l2);
add(cuenta2);
add(l3);
add(ta);
ta.setFocusable(false);
add(boton1);
//escucho los botones (la accion):
saldoini =Integer.parseInt(JOptionPane.showInputDialog("Digite su Saldo inicial"));
boton1.setForeground(Color.blue);
boton1.addActionListener(this);
}
public void MontoTransac(int mtransac) {
try { // simulo el retraso
Thread.sleep(500);
} catch (InterruptedException e) {}
Cajero.balance = mtransac;
}

public void EjecTransaccionC() {
MontoTransac(saldoini);
//valido
vconsigna1 =Integer.parseInt(cuenta1.getText());
vconsigna2 =Integer.parseInt(cuenta2.getText());
PrintWriter salida = new PrintWriter(System.out, true);
cuenta monto = new cuenta (salida);
Movimiento mov1, mov2;
mov1 = new Movimiento (monto, vconsigna1, "mc1>.");
mov2 = new Movimiento (monto, vconsigna2, "mc2>.");
//iniciar consignacion
mov1.start();
mov2.start();
// espero que finalice la transaccion
try {
mov1.join();
mov2.join();
}
catch (InterruptedException a) {
System.out.println(a);
}
//muestro el balance final
Cajero.ta.append("***** El balance final es: " + balance+" *****");
saldoini=balance;
}


//accion
public void actionPerformed(ActionEvent e){
//boton de consignar
if (e.getSource().equals(boton1)){
ta.setText("");
if (cuenta1.getText().equals("")){
JOptionPane.showMessageDialog(null, "Es necesario colocar los valores $ del monto");
cuenta1.requestFocus();
}
else
if (cuenta2.getText().equals("")) {
JOptionPane.showMessageDialog(null, "Es necesario colocar los valores $ del monto");
cuenta2.requestFocus();
}
else
EjecTransaccionC();
}
}
}


class cuenta {

PrintWriter salida;

cuenta (PrintWriter vsalida) {
this.salida = vsalida;
}

synchronized void deposito (int monto, String trans) {
int balance;
Cajero.ta.append(trans + " guardando deposito " + monto+"\n");
Cajero.ta.append(trans + " obteniendo balance..."+"\n");
balance = ObtenerBalance();
Cajero.ta.append(trans + " balance encontrado " + balance+"\n");
balance+= monto;
Cajero.ta.append(trans + " ajuste del balance..."+"\n");
ModificarBalance(balance);
Cajero.ta.append(trans + " nuevo balance establecido en " + Cajero.balance+"\n");
}

int ObtenerBalance() {
try { //simular retraso
Thread.sleep(5000);
} catch (InterruptedException e) {}
return Cajero.balance;
}

void ModificarBalance (int balance) {
try { // simular retraso
Thread.sleep(5000);
} catch(InterruptedException e) {}
Cajero.balance = balance;
}
}

// clase de los hilos
class Movimiento extends Thread
{
cuenta vcuenta;
int montoconsig;
String message;
Movimiento (cuenta vcuenta, int vmonto, String message) {
this.message = message;
this.vcuenta = vcuenta;
this.montoconsig = vmonto;
}
public void run () {
vcuenta.deposito (montoconsig, message);
}
}



deja tu comentario o agradecimiento...

Comentarios

Entradas populares de este blog

Guardar datos en Postgre desde Java

Saludos amigos en esta oportunidad estableceremos conexion con postgre, para realizar la insercion de datos, primero que todo crearemos las variables de la conexion: String driver = "org.postgresql.Driver" ; String ruta = "jdbc:postgresql://localhost:5432/ nombre de la bd " ; String user = "postgres" ; String password = " clave "; Importante: El driver de Postgre para Java lo puedes descargar desde aqui: Driver PostgreSQL para explicar algo que es fundamental sobre la base de datos Ejemplo es que esta tiene tres (3) campos que son: codusuarios : de tipo biginteger serial (lo quiere decir que es un campo auto incremento en postgre). nombre : de tipo text. identificacion : de tipo text . Ahora seguimos con el codigo para insertar datos. Esta es la funcion correspondiente:   public void GuardarUsuario ( String nombre, String identificacion){         / / Insertar datos a la bd:           try{             Class.forName( d

Fireworks CS3 portable

Para que hagas los logos, botones e imagenes para tus aplicaciones facil y rapido... ¿Qué es Fireworks? Adobe Fireworks es una aplicación en forma de estudio (basada en la forma de estudio de Adobe Flash ), pero con más parecido a un taller destinado para el manejo híbrido de gráficos vectoriales con Gráficos en mapa de bits y que ofrece un ambiente eficiente tanto para la creación rápida de prototipos de sitios Web e interfaces de usuario, como para la creación y Optimización de Imágenes para web. Originalmente fue desarrollado por Macromedia , compañía que fue comprada en 2005 por Adobe Systems . Fireworks está disponible de forma individual o integrado en Adobe CS3/CS4/CS5 y por tanto ha sido diseñado para integrarse con otros productos de Adobe, como Dreamweaver y Flash . Integración con Adobe Flash La integración con Adobe Flash se ha ido reduciendo paulatinamente desde que Flash, en su versión 7, integró la herramienta PolyStar que hace un polígono

Pasar de una ventana a otra en java

Hola a todos en esta oportunidad estamos postiando algo que cuando empezamos con java es muy necesario y es como pasar de una ventana a otra, ya sea JDialog o JFrame; creados en tiempo de ejecucion o en aplicaciones de escritorio: Para llamar a un JDialog:        JDialog1 dialogo = new JDialog1 ( this , true );        dialogo . show (); y para cerrar un JDialogo de una plicacion de escritorio se puede utilizar:        dispose (); Para llamar a un JFrame:        JFrame1 frame = new JFrame1 ();        frame . show (); Para cerrar un JFrame de una plicacion de escritorio:                 dispose ();   o tambien: System. exit (0); y si se contruye a partir de la clase JFrame se coloca el siguiente codigo en la parte publica del documento:       setDefaultCloseOperation ( EXIT_ON_CLOSE ); Espero los siguientes ejemplos les sean de mucha ayuda... Deja tu comentario o agradecimiento.