"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:
Clase Llenarpublic 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) { } } } }
Código:
Clase vaciarpublic class Llenar extends Thread { ArrayDinamico arrayDinamico; public Llenar(ArrayDinamico arrayDinamico) { this.arrayDinamico = arrayDinamico; } @Override public void run() { if (!arrayDinamico.isEstaLleno()) { arrayDinamico.llenarArray(); } } }
Código:
public class PruebaArraypublic class Vaciar extends Thread { ArrayDinamico arrayDinamico; public Vaciar(ArrayDinamico arrayDinamico) { this.arrayDinamico = arrayDinamico; } @Override public void run() { if (arrayDinamico.estaLleno) { arrayDinamico.vaciarArray(); } } }
{
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!