Problemas con hilos y variables

Hola

Tengo un problema, en un ciclo declaro una variable que voy llenando conforme el loop, dentro del loop tengo una condicion, cuando la variable llegue a contener 1000 objectos lanzo un hilo y le paso la variable para que la atienda, saliendo del if tengo que vaciar la variable para que se siga llenando, pero como la variable se la pase a un nuevo hilo el hilo marca null pointer exception (obvio por que nulie la variable en el metodo anterior), alguien sabra como solucionar esto.

Se me ocurre usar reflection para crear variables, pero creo que no estan facil de hacerlo, y no se me ocurre como solucionarlo.

PD: el ciclo es infinito

gracias

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de neko069

...Y si pones algo de

...Y si pones algo de código?
Y bueno, así de entrada, en lugar de "nuliarla" porqué mejor no te creas un método que limpie las propiedades de tu bean??

Imagen de skuarch

Codigo

el codigo no lo puede poner por que depende de muchas cosas pero este seria un ejemplo

public class Test{

     public static void main(String[] args){

          ArrayList list = new ArrayList();

          while(true){

          list.add(new String("algo"));

          if(list.size() == 1000){

               Thread t = new Thread(new Atiende(list)); //aqui le paso list
                t.start();

                // se tiene que borrar la lista por que si no volveria a entrar al if y
                // se vuelve a procesar todo de nuevo
                list.clear();
                list=null;
                list = new ArrayList();
           }
        }
    }
}

Entonces el hilo marca nullponter exception por que las variables se pasan por referencia, el problema no es el list = null; el problema es como creo una nueva referencia o como pasar un parametro por valor no por referencia

Imagen de neko069

Pues de entrada, con el

Pues de entrada, con el list.clear() ya no necesitas apuntarla a null, y crearla de nuevo, ése metodo limpia tu lista, y viéndolo como lo expones, tendrías entonces que "clonar" (por decirlo de alguna forma) tu lista, es decir, creas una lista2, le copias el contenido de tu lista1, envías tu lista2 al proceso que dices, limpias tu lista1 y la vuelves a llenar....

Imagen de skuarch

solucion

solo cambie este pedaso de linea

Thread t = new Thread(new Atiende(new ArrayList(list)));

osea creo un nuevo ArrayList, pero no estoy seguro, si con esto tambien comparten la referencia en memoria, pero por lo pronto ya jala

gracias

Imagen de ezamudio

copia

Parece que ya lo solucionaste; es importante que al otro hilo le pases una nueva lista que no se vaya a modificar en el ciclo del hilo principal, o si le pasas esa lista, entonces en tu ciclo principal creas una nueva para continuar trabajando, pero la cosa es que no esten ambos hilos trabajando sobre la misma lista.

Imagen de Nopalin

Simple

Como diria un amigo.... tas viendo y no ves.

La solución está frente a tus ojos. Tienes una variable en el thread 1, a esa le asignas una instancia de ArrayList, la vas llenando de objetos y cuando llega a un numero de elementos creas un thread 2 y se la pasas, y como bien apuntaste en java los objetos se pasan por referencia, entonces tanto en el thread 1 como en el 2 tienes dos variables, ambas apuntando a la misma instancia de ArrayList, entonces lo único que debes hacer es en el thread 1 asignarle una nueva instancia a tu variable y listo.

Cuando haces el clear es lo que seguramente te esta ocasionando broncas, por que si el thread 2 esta movimiendo la info del ArrayList y tu lo limpias puedes entrar en un Concurrent Exception, el nular tu variable no debe tener problemas ya que estas nulando la variable del thread 1, no la del thread 2.

Sobres