Java - Métodos synchronized

 
Vista:

Métodos synchronized

Publicado por Aitor (13 intervenciones) el 09/11/2009 17:23:35
Hola,

vereis, tengo 3 clientes servidores que acceden a una seccion critica a la que solo peude acceder uno y para ello cada uno que quiere acceder pregunta a los demas si estan en ella (esto por RMI) , por tanto, en una parte del extenso codigo se trata de que espere en un wait() hasta que el otro cliente-servidor le envie un ok.

la cuestion es que declaro un metodo synchronized pq va a contener un wait dentro de el:

public synchronized void requestAccess(Client requesterClient)

....

while (votes<=listaServers.length){
try {
System.out.println("esperando en el wait ???");
wait();
System.out.println("ya no esperamos");
} catch (InterruptedException e) {e.printStackTrace();}

y en el metodo de envio de OK

declaro lo siguiente:

public synchronized void OK() {

votes++;
System.out.println("sumando votos");
notifyAll();

}

El problema, es que segun se desarrolla el programa principal, desde requestAccess accede a otro metodo, y desde este otro metodo al metodo OK(), es decir, que llega antes al notifyAll que al wait. Pero bueno, el mayor problema es que nunca llega a entrar al metodo OK, y yo deduzco que es porque es synchronized y tengo algun error de concepto.. y no se pueden declarar 2 metodos synchronized en la misma clase, o no se puede llamar desde un synchronized a otro... o que. No tengo mucha idea de threads la verdad y por mas que leo no entiendo que hago mal.

Lo que quiero es que cada vez que se llegue a la parte del codigo OK se notifique al thread que esta en wait() para que siga con la ejecucion.

No se si me he explicado bien...

Un saludo y gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Métodos synchronized

Publicado por Tom (1831 intervenciones) el 10/11/2009 09:29:01
No sé si te explicas bien, pero al menos yo no he conseguido entenderte (lo que sí he conseguido es dolor de cabeza) :-D

Echa un ojo a esta página, está bastante bien:

http://www.chuidiang.com/java/hilos/wait_y_notify.php
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Métodos synchronized

Publicado por paco (7 intervenciones) el 10/11/2009 15:58:31
mandeeeee?,... XD eso es una consulta rara y lo demas tonterias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Métodos synchronized

Publicado por Aitor (13 intervenciones) el 10/11/2009 20:40:28
si, es un movidon y dificl de explicar asi desde 0.

jeje,

bueno, voy a intentar explicarme mejor, o enfocar la pregunta algo mas general.

A ver, tengo 2 metodos en una clase.

Desde uno hago un wait(), por tanto debe ser synchronized, no ?

y desde el otro metodo quiero hacer un notifyAll(), tambien debe ser synchronized, no ?

Bueno, seria tal que asi.

// MAIN

metodoConWait()

// FIN MAIN

// Metodos de la clase


public synchronized void metodoConWait(){

....

/*llamada*/ metodoConNotifyAll(); //aqui dentro se hara el notifyAll
....

wait()

...

}

//---------------------------------------------------------------------------

public synchronized void metodoConNotifyAll(){

...

notifyAll();

....

}



pero el problema, es que cuando ejecuto el metodo, "metodoConWait()" se me queda parado en la llamada MetodoConNotifyAll() y no llega a entrar al metodo, y no entiendo por que, si le quito el synchronized al metodoConNotifyAll() entonces si me entra, pero claro, no me deja hacer el notifyAll().

La cosa es bastante mas compleja que todo esto, y tiene sentido que primero se haga el notifyAll, al menos en una primera vez (o eso creo, si es imposible, o asi decidmelo...), pero si me resolveis esto doy un paso adelante.

Si seguis sin entender mi pregunta, lo volveré a intentar explicar, pq como veis no he dado con la solucion :S

un saludo y gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar