Ver Mensaje Individual
  #5 (permalink)  
Antiguo 18/08/2011, 05:10
ElAthlit
 
Fecha de Ingreso: febrero-2011
Mensajes: 672
Antigüedad: 13 años, 2 meses
Puntos: 78
Respuesta: Consulta synchronized objeto

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" "\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" "\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