Threads en java y synchronized

Resuelto/Cerrado
Javier - 27 mar 2022 a las 18:41
TheOneAboveAll Mensajes enviados 2532 Fecha de inscripción lunes, 10 de enero de 2022 Estatus Miembro Última intervención viernes, 11 de noviembre de 2022 - 2 abr 2022 a las 16:49
Hola, hago este post porque queria saber si mi codigo esta bien escrito, este es el codigo:


public class Principal {
public Principal self = this;
public String Cadena = "Cadena de prueba 1\n";

Thread TrUno = new Thread(){
public void run(){
synchronized (self) {
Cadena += "Hello from Thread 1\n";
}
}
};

Thread TrDos = new Thread(){
public void run(){
synchronized (self) {
Cadena += "Hello from Thread 2";
}
}
};

public void start(){
try {
TrUno.start();
TrDos.start();
Thread.sleep(2000);
} catch(InterruptedException ex) {
Thread.currentThread().interrupt();
}
}

public static void main(String []args){

Principal p = new Principal();
p.start();

System.out.println("En main Cadena=" + p.Cadena);
}
}


Se quiere accedee a la variable "Cadena" para leerla y escribirla desde cada uno de los threads creados. Quisiera saber si esta bien puesta la palabra self como parametro de synchronized, self hace referencia al mismo objeto "Principal"
En otro lugar me dijeron que debia ser asi:



Thread TrUos = new Thread(){
public void run(){
synchronized (this) {
Cadena += "Hello from Thread 2";
}
}
};

Pero me parece a mi que this aqui hace referencia al thread y no a Principal. Estot equivocado o en lo cierto?.


Ademas...


Estuve leyendo sobre synchronized y lei que el bloque synchronized lleva entre paréntesis la referencia a un objeto . Cada vez que un thread intenta acceder a un bloque sincronizado le pregunta a ese objeto si no hay algún otro thread que ya tenga el lock para ese objecto, en otras palabras, le pregunta si no hay otro thread ejecutando algun bloque sincronizado con ese objeto.
Consulta también:

1 respuesta

TheOneAboveAll Mensajes enviados 2532 Fecha de inscripción lunes, 10 de enero de 2022 Estatus Miembro Última intervención viernes, 11 de noviembre de 2022 1.038
2 abr 2022 a las 16:49
...
1