Java hilos codigo (java Thread)

Words
420
Reading
2 min
Listen
Play
9y
Hola comunidad Steemit, hoy seguiremos hablando sobre hilos y multi-hilos en java, para aprender algunos conceptos y analizar cómo funciona les invito a revisar el anterior post
Post hilos en Java

javahilos.jpg
Codigo Ejemplo

Creamos la Clase Banco en ella definimos 1 atributo que llamaremos saldo de tipo int.
Luego creamos 3 métodos sincronizados (synchronized) lo cuales llamaremos :

  • retirarDinero(int retiro)
  • depositarDinero(int deposito)
  • getSaldo()
  •  
    
    public class Banco {
    private int saldo;
    public synchronized void retirarDinero(int retiro){
        if( getSaldo()>=retiro){
            this.saldo=this.saldo-retiro;
            System.out.println("retiraste "+retiro);
            System.out.println("el saldo" +getSaldo());
        }else{
            System.out.println("saldo insuficiente al intentar retirar "+retiro);
        }       
    }
    public synchronized  void depositarDinero(int deposito){    
        try {
            Thread.sleep(1500);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        this.saldo=this.saldo+deposito; 
        System.out.println("depositaste "+deposito);
        System.out.println("luego de depositar el saldo" +getSaldo());
    }
    public synchronized int getSaldo() {
        return saldo;
    }
     }
    

    Luego creamos la clase Contenedor y definido en ella el método principal main se genera una instancia de la Clase Banco, y finalmente, se invoca el método run() sobre la instancia de las Clase Banco

     
    
    public class Contenedor implements Runnable {
    private Banco bank;
    public Contenedor(Banco bank) {
        this.bank = bank;
    }
    @Override
    public void run() {
        while(Boolean.TRUE)
        {
            bank.retirarDinero(20);
            bank.depositarDinero(30);
            bank.retirarDinero(20);
            bank.retirarDinero(20);      
        }
    }
    public static void main(String[] args) {
        Banco bank=new Banco();
        Thread hilo1=new Thread(new Contenedor(bank));
        Thread hilo2=new Thread(new Contenedor(bank));
        Thread hilo3=new Thread(new Contenedor(bank));
    
        hilo1.start();
        hilo2.start();
        hilo3.start();  
         }
      }
    

    consola banco bien.jpg



    Aquí tenemos otro ejemplo con hilos y el uso de monitores en java

    Creamos la Clase Cañón en ella definimos 2 atributos los llamaremos bala de tipo int y para el monitor un atributo llamado preparado de tipo boolean.
    Luego creamos 2 métodos sincronizados (synchronized) lo cuales llamaremos :

  • dispararBala()
  • cargarCañon (int bala)
  •  
    
    public class Cañon {
    public int bala;
    boolean preparado=false;
    public synchronized int dispararBala(){
        if(!this.preparado){
            try{
                wait();
            }catch (InterruptedException e) {
                System.out.println("error interrumpido "+e);
            }
        }
        this.preparado=false;           
        System.out.println("disparando cañon bala numero "+bala);   
        notify();
        return bala;
    }
    public synchronized void cargarCañon (int bala){
        if(this.preparado){
            try{
                wait();
            }catch (Exception e) {
                System.out.println("error interrumpido "+e);
            }
        }
        System.out.println("cargando el cañon bala numero "+bala);
        this.bala=bala;
        this.preparado=true;
        notify();
         }
      }
    
     
    
      public class Cargar implements Runnable{
    private Cañon cañon;
    public Cargar(Cañon cañon) {
        this.cañon=cañon;
        new Thread(this,"disparando ").start();
    }
    @Override
    public void run() {
        int bala=1;
        while(true){
            cañon.cargarCañon(bala++);      
          }     
      }
    }
    
     
    
        public class Disparar implements Runnable {
         private Cañon cañon;
    public Disparar(Cañon cañon) {
        this.cañon=cañon;
        new Thread(this,"disparar ").start();
    }
    @Override
    public void run() {
        while(true){
            cañon.dispararBala();
         }
       }
    }
    
     
    
       public class CampoTiros {
    public static void main(String[] args) {
        Cañon cañon=new Cañon();
        new Disparar(cañon);
        new Cargar(cañon);          
       }
    }
    

    coñon disparar consola.jpg

    Gracias a todos por leer…



    Java hilos codigo (java Thread) | Ecency