Foros del Web » Programación para mayores de 30 ;) » Java »

Manejo de variables con hilos

Estas en el tema de Manejo de variables con hilos en el foro de Java en Foros del Web. Hola tengo un problema: cuando inicio un nuevo hilo..... uso el metodo start() que llama al metodo run() de la clase del hilo. dentro de ...
  #1 (permalink)  
Antiguo 10/09/2008, 22:54
 
Fecha de Ingreso: marzo-2008
Mensajes: 237
Antigüedad: 16 años, 1 mes
Puntos: 6
Manejo de variables con hilos

Hola tengo un problema:

cuando inicio un nuevo hilo..... uso el metodo start() que llama al metodo run() de la clase del hilo.

dentro de ese metodo run() entre otras cosas necesito modificar una det. variable y que la modificacion la vea reflejada tmb en el main del programa.
como podria hacer esto ?

mandarle argumentos al run no puedo.
  #2 (permalink)  
Antiguo 10/09/2008, 23:18
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: Manejo de variables con hilos

Hola:

Puedes hacer una clase que herede de Thread e implemente el método run(), o bien una clase que herede de Runnable (con el método run()) y pasársela luego a una clase Thread en el constructor. Al hacer la clase de esta manera, puedes ponerle atributos y todos los métodos set y get que quieras, además de poder pasarle parámetros en el constructor. Luego el método run() puedes modificar esos atributos, que están accesibles con el método get() desde el main() o desde cualquier otro sitio.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 11/09/2008, 10:24
 
Fecha de Ingreso: marzo-2008
Mensajes: 237
Antigüedad: 16 años, 1 mes
Puntos: 6
Respuesta: Manejo de variables con hilos

Si, yo lo que estaba haciendo era una clase que herede de Thread, y le mandaba argumentos por el Constructor.

El tema es que por ejemplo yo le mando un INT por el constructor, y lo seteo en una variable de la clase (declarada arriba de todo como propiedad). Despues esa variable la uso...

Pero tengo problemas para mandarle luego el proximo INT de constructor (porque estoy ejecutando en un for muchos threads).

La idea es que el int que le vaya mandando se vaya sumando y a cada thread le mande un i incrementado. Pero mi problema es que dentro de la clase del thread tengo una conexion que hacer (Socket), si esa conexion se hace (osea que se puede conectar) el i en el proximo thread se debe incrementar, pero sino, no.

De manera que no le puedo mandar el i del for del main, y no se me ocurre como detectar esto de incremento o no.
  #4 (permalink)  
Antiguo 11/09/2008, 10:38
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: Manejo de variables con hilos

Hola:

En plan chapuza, puedes declarar un int public y static en alguna clase. Ese int es accesible desde cualquier sitio y es compartido, usando esto Clase.elInt. Quizás tengas que sincronizar los hilos.

Algo más elegante es hacer una clase que tenga dentro el int como atributo normal con métodos de incrementa(), getInt(), etc. Haz un solo new de esta clase y pásasela a todos los hilos en vez de el int normal. A partir de java 5 tienes la clase AtomicInteger, que precisamente hace esta función y además es thread-save.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #5 (permalink)  
Antiguo 11/09/2008, 11:39
 
Fecha de Ingreso: marzo-2008
Mensajes: 237
Antigüedad: 16 años, 1 mes
Puntos: 6
Respuesta: Manejo de variables con hilos

Intente hacer lo de la variable public, pero no me sale.

En el Main declare arriba de todo public int pepe = 0;

Luego, en la clase del thread, cuando se conecta al socket (osea que la tengo que incrementar), instancio a la clase del Main y hago Main.pepe += 1;
Luego de ejecutar esa clase del thread, sigo debugeando y pepe en el main sigue valiendo 0 (osea los cambios los deberia ver en TODAS las clases).

Osea la idea, es que yo al tener threads ejecutandose en un for pienso de la siguiente manera: es imposible que todos se ejecuten a la vez, uno se va a ejecutar antes que otro. Entonces: por cada thread que se ejecuta y se conecta (socket) debo incrementar una variable. (o mejor dicho, poder modificar una variable y que los cambios se vean en todas las clases. en realidad lo que me importa es que los cambios se vean en las proximas clases de threads instanciados del for, se entiende? asi hago el valor anterior + 1 y ya.. sigo incrementando).

que estoy haciendo mal? quiza me falto la declaracion de estatica (que no se aun como es en java xD).... pero.. aunque haga eso, hay algo mal, porque por lo que vi puedo solamente leer la variable, no modificar y que se vean los cambios


edit: probe lo mismo pero con static y tampoco. la linea en que escribo Main.variable (main = instancia a la clase main principal, y variable es la variable estatica de la clase principal). me dice: "The static field Main.variable should be accessed in a static way"

Última edición por razer; 11/09/2008 a las 14:03
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:55.