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
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) {
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();
}
}
|
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);
}
}
|
Gracias a todos por leer…
Congratulations! This post has been upvoted from the communal account, @minnowsupport, by neliobatis from the Minnow Support Project. It's a witness project run by aggroed, ausbitbank, teamsteem, theprophet0, someguy123, neoxian, followbtcnews, and netuoso. The goal is to help Steemit grow by supporting Minnows. Please find us at the Peace, Abundance, and Liberty Network (PALnet) Discord Channel. It's a completely public and open space to all members of the Steemit community who voluntarily choose to be there.
If you would like to delegate to the Minnow Support Project you can do so by clicking on the following links: 50SP, 100SP, 250SP, 500SP, 1000SP, 5000SP.
Be sure to leave at least 50SP undelegated on your account.