Buenos dias, tengo que hacer este ejercicio:
"Realizar un programa en el que vamos a tener un array dinamico que se vacia y llena constantemente con un numero determinado de elementos (por ejemplo 10). Los encargados del vaciado y llenado van a ser dos hilos, uno que se encarga de llenar y otro de vaciar continuamente. Por defecto el array estara vacio".
Yo he hecho esto:
Clase ArrayDinamico:
Código:
public class ArrayDinamico
{
protected static ArrayList<Integer> lista;
protected int numElementos;
protected boolean estaLleno;
public ArrayDinamico(int numElementos)
{
this.numElementos = numElementos;
estaLleno = false;
lista = new ArrayList<>(numElementos);
}
public boolean isEstaLleno()
{
return estaLleno;
}
public synchronized void llenarArray()
{
if (lista.isEmpty())
{
for (int i = 0; i < numElementos; i++)
{
lista.add((int) (Math.random() * 100) + 1);
}
for (int num : lista)
{
System.out.print(num + " ");
}
System.out.println("ARRAY LLENO");
estaLleno = true;
try
{
Thread.sleep(300);
} catch (InterruptedException e)
{
}
notifyAll();
}
}
public synchronized void vaciarArray()
{
if (lista.size() == numElementos)
{
System.out.println("VACIANDO ARRAY");
for (int i = lista.size(); i == 0; i--)
{
lista.remove(i);
}
System.out.println("ARRAY VACIO");
estaLleno = false;
try
{
Thread.sleep(300);
} catch (InterruptedException e)
{
}
}
else
{
try
{
System.out.println("WAIT!");
wait();
} catch (InterruptedException e)
{
}
}
}
}
Clase Llenar
Código:
public class Llenar extends Thread
{
ArrayDinamico arrayDinamico;
public Llenar(ArrayDinamico arrayDinamico)
{
this.arrayDinamico = arrayDinamico;
}
@Override
public void run()
{
if (!arrayDinamico.isEstaLleno())
{
arrayDinamico.llenarArray();
}
}
}
Clase vaciar
Código:
public class Vaciar extends Thread
{
ArrayDinamico arrayDinamico;
public Vaciar(ArrayDinamico arrayDinamico)
{
this.arrayDinamico = arrayDinamico;
}
@Override
public void run()
{
if (arrayDinamico.estaLleno)
{
arrayDinamico.vaciarArray();
}
}
}
public class PruebaArray
{
public static void main(String[] args)
{
ArrayDinamico a1 = new ArrayDinamico(10);
Llenar llenar = new Llenar(a1);
Vaciar vaciar = new Vaciar(a1);
llenar.start();
vaciar.start();
}
}
Pero no tengo el resultado esperado. El metodo vaciarArray nunca llega a ejecutarse. El programa solo imprime esto:
11 85 97 30 42 76 63 66 9 62 ARRAY LLENO
Alguien me echa un cable? Gracias!