Concurrencia y ficheros.
martes, marzo 11, 2014 at 4:11PM
jcarmonaloeches

¿Cuál es la salida por consola, y cuál la escrita en el fichero, de ejecutar el siguiente código fuente?

NOTA: no tiene gracia responder haciendo uso de un IDE. En el examen de certificación no te dejarán hacer uso del mismo.

Por favor, argumenten la respuesta.

 

package pruebas;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
/**
 * 
 * @author Jaime Carmona Loeches
 * 
 */
public class Escritor implements Runnable {
private String nombreFichero = "";
@Override
public void run() {
System.out.println("Escritor ejecutando");
ejecutaLogica(0);
}
public Escritor(String nombreFichero) {
System.out.println("Escritor inicializado");
this.nombreFichero = nombreFichero;
}
private synchronized void ejecutaLogica(int numEjecucion) {
System.out.println(numEjecucion);
FileWriter fw = null;
BufferedWriter bw = null;
try {
File file = new File(nombreFichero);
fw = new FileWriter(file);
bw = new BufferedWriter(fw);
for (int i = 0; i < 10; i++) {
String texto = numEjecucion + ":" + i;
bw.write(texto + "\n");
}
cierraRecursos(fw, bw);
numEjecucion++;
if (numEjecucion < 2)
ejecutaLogica(numEjecucion);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
}
}
private void cierraRecursos(FileWriter fw, BufferedWriter bw) {
try {
bw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
fw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* @param args
* @throws InterruptedException
*/
public static void main(String[] args) {
String nombreFichero = "out.txt";
Escritor escritor = new Escritor(nombreFichero);
escritor.run();
}
}

Article originally appeared on javaHispano (http://www.javahispano.org/).
See website for complete article licensing information.