Ver Mensaje Individual
  #1 (permalink)  
Antiguo 25/11/2011, 20:24
Avatar de hackjose
hackjose
 
Fecha de Ingreso: abril-2010
Ubicación: Edo Mexico
Mensajes: 1.178
Antigüedad: 14 años, 11 meses
Puntos: 131
synchronized en metodos de instancia y clase

Hola a todos, yo de nuevo jeje.
Estuve checando esta pagina
http://epere4.blogspot.com/2008/04/c...d-en-java.html

Me podrian aclarar unas dudas respecto a este texto y de lo que saben?

metodos de instancia

public synchronized void metodo() {
// codigo del metodo aca}es lo mismo que
}

public void metodo() {
synchronized(this) {
// codigo del metodo aca
}}

me queda duda con el this, osea este amigo dice que los bloques synchronized lleban entre parentesis la referencia a un objeto, pero this sirve para hacer referncia a un objeto meramente no es la referencia a un objeto.

En este caso que pasa con this(como lo puedo asimilar en la ment), o es de esas "reglas" que se deben usarsei y no preguntar XD ?

En el caso de los metodos de clase si lo asimilo asi que pasare a lo siguiente.

Por lo que entiendo los threads y synchronized trabajan de esta manera->

funcion primero(){
bloque synchronized, su referencia de objeto es uno
}

funcion segundo(){
bloque synchronized, su referencia de objeto es dos
}

funcion tercero(){
bloque synchronized, su referencia de objeto es uno
}

thread1 ejecuta funcion primero(referencia de objeto uno)
En este caso ningun otro thread puede ejecutar un metodo que contenga un bloque synchronized y dicho bloque synchronized tenga una referencia a uno.

en este caso thread1 ejecuta funcion primero eso significa que ningun thread puede ejecutar a las funciones primero y tercero pero si cualquier otro thread puede ejecutar a la funcion segundo ya que su referencia de objeto es distinto.

Es asi como funciona?

y otra cosa
esto

Si hay dos bloques synchronized que hacen referencia a distintos objetos (por más que ambos utilicen el mismo nombre de variable), la ejecución de estos bloques no será mutuamente excluyente.

se refiere a lo que dije antes

thread1 ejecuta funcion primero(referencia de objeto uno)
En este caso ningun otro thread puede ejecutar un metodo que contenga un bloque synchronized y dicho bloque synchronized tenga una referencia a uno.

en este caso thread1 ejecuta funcion primero eso significa que ningun thread puede ejecutar a las funciones primero y tercero pero si cualquier otro thread puede ejecutar a la funcion segundo ya que su referencia de objeto es distinto.

espero me puedan ayudar.