Codigo en Java que no hace lo que deberia

Iniciado por xoker, 18 Enero 2014, 21:09 PM

0 Miembros y 1 Visitante están viendo este tema.

~ Yoya ~

 
Cita de: xoker en 24 Enero 2014, 21:22 PM
//Supongamos que antes se ha declarado esto:
//Object cerrojo = new Object();

switch(tipoHilo){
       case 0:
        for(int i=0; i<nVueltas; i++)
        synchronized(cerrojo){ n=n+1;}; // <--- Cambio de cerrojo
        break;
       case 1:
        for(int i=0; i<nVueltas; i++){
        synchronized(cerrojo){n=n-1;}; // <--- Cambio de cerrojo
        break;
     }


Si dices eso, donde debo poner ese código?? según tu comentario antes del switch, porque no vas a declarar un atributo estático dentro de un método. Me dices que lo coloque antes del switch, posteo el codigo de como debe quedar segun usted y luego me dices que el codigo es mio y que es una bestia jejeje

Yo hasta ahora he tratado simular tu código porque nomas haz puesto código que no funcionan, malas indicaciones, o simplemente que funcionan pero estan mal hecho, y encima pones que mis codigo son bestiales y lo único que he hecho es seguir sus indicaciones para tratar de dar con el código que suyo que no funciona y que hasta ahora es que lo agrega al topic, para poder ver el problema y mirar que pasa... Pero el codigo malo que tienes me dices con son míos. Y en este punto es que haz puesto el código que deberías haber puesto al principio del hilo.

Men si eres tan buen programador, entonce hubieras arreglado y encontrado la razón porque pasa lo que pasa, ya que simplemente el error es básico.

Saludos y debuguea.
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

xoker

Cita de: ~ Yoya ~ en 26 Enero 2014, 16:08 PM

Si dices eso, donde debo poner ese código?? según tu comentario antes del switch, porque no vas a declarar un atributo estático dentro de un método. Me dices que lo coloque antes del switch, posteo el codigo de como debe quedar segun usted y luego me dices que el codigo es mio y que es una bestia jejeje

Yo hasta ahora he tratado simular tu código porque nomas haz puesto código que no funcionan, malas indicaciones, o simplemente que funcionan pero estan mal hecho, y encima pones que mis codigo son bestiales y lo único que he hecho es seguir sus indicaciones para tratar de dar con el código que suyo que no funciona y que hasta ahora es que lo agrega al topic, para poder ver el problema y mirar que pasa... Pero el codigo malo que tienes me dices con son míos. Y en este punto es que haz puesto el código que deberías haber puesto al principio del hilo.

Men si eres tan buen programador, entonce hubieras arreglado y encontrado la razón porque pasa lo que pasa, ya que simplemente el error es básico.

Saludos y debuguea.

Este es el ultimo mensaje que escribo en el hilo.

Desde el inicio el codigo que tengo en mi PC funciona perfectamente (al copiarlo me puse una llave de mas, error mio que ni siquiera sabia que habia puesto y que imagino que nadie se dio cuenta al principio hasta que lo mencionaste mas tarde), el unico problema que tiene el codigo es que cuando pongo un cerrojo de tipo Integer y lo uso, el cerrojo deja de hacer su funcion de cerrojo y deja pasar a todo el mundo. Si uso un cerrojo por ejemplo de tipo Object el codigo funciona perfectamente.

Mi duda es y siempre ha sido la siguiente: ¿Por que cuando uso un cerrojo de tipo Integer y lo uso como un entero el cerrojo deja de funcionar?

Nada mas y nada menos, creo que en el primer post y en los sucesivos lo he preguntado siempre...

Por ultimo solo decir, que dije que tus codigos eran bestialidades, por varias razones:

-Hacer un cerrojo No estatico no vale para nada.
-Declarar un cerrojo dentro de un metodo no vale para nada.
-Poner el synchronized que ocupa todo el switch deja sin paralelismo.
-Poner el synchronized que ocupa todo el for vuelve a dejar sin paralelismo.

Esto se estudia al comienzo en la universidad, lo se porque en segundo de carrera estoy cursando una asignatura sobre paralelismo y todos lo hacemos al principio... y con el tiempo, ves la burrada que significa.

Aun asi muchas gracias por haber tratado de ayudarme.

Un saludo.

~ Yoya ~

#12
Cita de: xoker en 26 Enero 2014, 19:29 PM

Desde el inicio el codigo que tengo en mi PC funciona perfectamente (al copiarlo me puse una llave de mas, error mio que ni siquiera sabia que habia puesto y que imagino que nadie se dio cuenta al principio hasta que lo mencionaste mas tarde)


Como voy a adivinar el codigo que tiene errores logico si lo pegas mal... Sigo las indicaciones que me das para saber como tienes el codigo, la das mal y luego dices que es mi código  :rolleyes:



Cita de: xoker en 26 Enero 2014, 19:29 PM
Esto se estudia al comienzo en la universidad, lo se porque en segundo de carrera estoy cursando una asignatura sobre paralelismo y todos lo hacemos al principio... y con el tiempo, ves la burrada que significa.

Brother, tengo mas de 4 años programando, tengo la certificación de OCPJP (Oracle Certified Professional, Java Programmer), voy a tomar muy pronto si dios quiere la certificación OCPJBCD (Oracle Certified Expert, Java EE 6 Enterprise JavaBeans Developer), trabajo como Java EE Developer & PHP Developer, y me vas a salir con eso de la universidad...

Si comienzas a depurar el codigo, observas como se comporta sabrás todas las respuesta a tus preguntas. Pero todavía no entiendo porque no lo haz hecho

Saludos.
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

lnvisible

@Yoya Es tontería usar el depurador con código concurrente porque las condiciones de carrera no se van a dar cuando estás usando el depurador.

@xoker Mi código ejecuta en paralelo, no secuencialmente. Míralo otra vez si lo necesitas.

Estás usando synchronized mal, y el depurador no te lo va a decir. Si miras la documentación verás que el mutex a especificar es "this" o la clase para los métodos estáticos: http://tutorials.jenkov.com/java-concurrency/synchronized.html#synchronized-blocks-instance-methods