Necesito una condicion para sincronizar
Publicado por jose cisneros (1 intervención) el 10/11/2015 07:46:43
Ayuda con una sincronizacion de hilos
Buenos días gente les saluda Jose Cisneros...aqui para molestarles y si me pueden ayudar con una inquietud espero poder describir bien el problema...Tengo 4 clases, la primera donde tengo el método de escribir en un fichero txt y otro método de cerrar, la segunda y la tercera son interfaces runnable que quiero interactuar con el metodo de escritura de fichero y la cuarta el main donde instancio los threads y le mando las tareas el problema es que no se como mandar la condición que permita sincronizar se que debo usar el metodo wait y notify all pero el problema es ese la condicion con todo les dejare el codigo
Metodo para escribir en archivo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class Archivo {
private File archivo;
private FileWriter fw;
public Archivo() {
try {
archivo = new File("C:\\Users\\jose_\\Desktop\\prueba.txt");
fw = new FileWriter(archivo);
} catch (Exception ex) {
Logger.getLogger(Archivo.class.getName()).log(Level.SEVERE, null, ex);
}
}
public synchronized void escribirArchivo(String mensaje) {
//Aqui tengo que escribir una condicion para usar el wait y que espere diana hasta que termine jose
try {
fw.append(mensaje);
} catch (IOException ex) {
Logger.getLogger(Archivo.class.getName()).log(Level.SEVERE, null, ex);
}
//finalizar con el notify all para despertar a diana y que escriba
}
public void cerrarFW() {
try {
fw.close();
} catch (IOException ex) {
Logger.getLogger(Archivo.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Interfaz Jose
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class jose implements Runnable{
private Archivo a;
public jose(Archivo a){
this.a=a;
}
@Override
public void run() {
for(int i=0;i<30;i++){
a.escribirArchivo("Hola soy jose\r\n");
}
a.cerrarFW();
}
}
Interfaz Diana
1
2
3
4
5
6
7
8
9
10
11
12
13
public class diana implements Runnable{
private Archivo a;
public diana(Archivo a){
this.a=a;
}
@Override
public void run() {
for(int i=0;i<20;i++){
a.escribirArchivo("Hola soy diana\r\n");
}
}
}
Main
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class principalJoseDiana {
public static void main(String[] args) {
Archivo a = new Archivo();
jose j = new jose(a);
diana d = new diana(a);
Thread hj = new Thread(j);
Thread hd = new Thread(d);
hj.start();
hd.start();
}
}
Lo que deseo es que jose escriba primero y una vez que haya terminado de escribir, que escriba Diana.....Espero me hayan entendido....Gracias de antemano y un saludo desde Ecuador
Valora esta pregunta


0