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 originalsynchronized (elPrintWriter) {
elPrintWriter.println(lo que sea);
}
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.