Ver Mensaje Individual
  #6 (permalink)  
Antiguo 09/10/2014, 14:47
Avatar de chuidiang
chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 1 mes
Puntos: 454
Respuesta: Sincronizacion hilos - Escritura txt

Hola:

No sé qué problema tienes. ¿Sale todo en el fichero pero sale entremezclado? ¿o no sale completo?

El tema de sincronización a falta de ver más código, lo veo raro. Si cada hilo hace su propio new de FileAccess, tienes una instancia de esa clase por cada hilo. El método synchronized afecta a una instancia concreta, por lo que si cada hilo tiene su propia instancia, nunca va a haber dos hilos accediendo a la misma instancia, por lo que es indistinto que pongas el método synchronized o no, y tampoco estás sincronizando el acceso al fichero.

Como dentro de FileAcess has puesto static el PrintWriter, cuando haces new FileAccess(logFW), estás creando tres PrintWriter (cada FileAccess hace un new PrintWriter) que están "machacandose" mutuamente, ya que los guardas en el atributo que es static. Al final, el único PrintWriter válido es el del último hilo que haya hecho el new. Puedes tener problemas si antes de "machacar", el hilo anterior ha empezado a escribir en el PrintWriter anterior a través del fileAccess.printLine()

Yo en tu lugar haría lo siguiente. En vez de pasar logFW a los hilos, pásales directamente un PrintWriter (el mismo a todos). Cuando quieras que un hilo escriba, haz esto

Código Java:
Ver original
  1. synchronized (elPrintWriter) {
  2.    elPrintWriter.println(lo que sea);
  3. }

y en el código principal, cuando salgas del bucle de los join, cierra el PrintWriter para asegurar la escritura del ficheoro en disco. Luego lo muestras.

Se bueno.
__________________
Apuntes Java
Wiki de Programación