Netbeans - Necesito una condicion para sincronizar

 
Vista:

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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder