Ver Mensaje Individual
  #1 (permalink)  
Antiguo 14/11/2015, 05:31
provocoaa
 
Fecha de Ingreso: febrero-2015
Mensajes: 12
Antigüedad: 9 años, 2 meses
Puntos: 0
Duda con Ejercicio Multi Hilo

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!