Buenas, he logrado que me "funcionara" aunque el segundo bloque no empieza desde el número 0....
(Abajo del código he puesto la explicación para que se entendiera mejor)
Clase Sincronized1 (principal) Código PHP:
public class Sincronized1 {
static FileWriter fr;
public Sincronized1(){
try{
fr = new FileWriter(new File("C:\\Test.txt"));
}catch (Exception e){
e.printStackTrace();
}
}
public void Metodo1(){
try{
Sincronized2 sin2 = new Sincronized2();
Sincronized3 sin3 = new Sincronized3();
sin2.start();
sin3.start();
sin2.join();
sin3.join();
fr.close();
}catch (Exception e){
e.printStackTrace();
}
}
public static void main(String[] args) {
Sincronized1 sin1 = new Sincronized1();
sin1.Metodo1();
}
Clase Sincronized2 (HILO1) Código PHP:
public void run(){
Sincronized1 sin1 = new Sincronized1();
synchronized (sin1.fr) {
try{
for (int i=0;i<10000;i++){
sin1.fr.write("A" + i + "\r\n");
}
}catch (Exception e){
System.out.println("Error en " + getClass().getName());
System.out.println(e.getMessage());
}
}
Clase Sincronized3 (HILO2) Código PHP:
public void run(){
Sincronized1 sin1 = new Sincronized1();
synchronized (sin1.fr) {
try{
for (int i=0;i<10000;i++){
sin1.fr.write("B" + i + "\r\n");
}
}catch (Exception e){
System.out.println("Error en " + getClass().getName());
System.out.println(e.getMessage());
}
}
SALIDA:
......
A9995
A9996
A9997
A9998
A9999
B90
B91
B92
B93
B94
B95
........
Pienso lo siguiente, a ver que creeis.
Es posible que mientras el Objeto
sin1.fr que uso en la Clase
sincroniced3 aunqué esté bloqueado, el bucle sigue funcionando y cuando por fin ya está desbloqueado y puede escribir, el bucle ha funcionado 89 vueltas (sin poder escribirlas en fichero)?? Yo pensaba que bloquearía el bucle al estar entre llaves tambien (si es que fuera ese el "problema").
Muchas gracias y un saludo!
Athlit