Java - Monitores en java

   
Vista:

Monitores en java

Publicado por Elena (2 intervenciones) el 05/03/2016 00:22:52
Hola, buenas noches necesito ayuda aqui expongo brevemente mi problema.
Estoy haciendo una practica que consiste en una piscina compartida en la que hay instructores y niños. Ambos ejecutan todo el rato dos metodos que son nadar y descansar. El objetivo es hacer un monitor para la piscina que cumpla una serie de normas para su acceso. La primera norma es que los niños no pueden nadar solos.
Hasta aqui explicado todo mi problema surge en que los instructores se van y dejan a los niños solos y no se que es lo que falla para que eso no pase aqui dejo el codigo espero que me puedan ayudar muchas gracias.

El monitor consta de 4 metodos que son kidSwim kidRest instructorSwim y instructorRest y son los que tengo que implementar. Aquí dejo mi implementacion que no me funciona bien.
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
public class Pool1 extends Pool0{//there cannot be kids alone
    private int instructor;
    private int  kid;
    private Log log;
 
    public Pool1(){
        this.instructor = 0;
        this.kid= 0;
 
       }
    public void make(Log log0)          {log=log0;}
 
    public  long begin(int id)          {return log.begin(id);}
 
    public  void end(int id)    {log.end(id);}
 
    public synchronized long kidSwims(int id) {
        while(instructor == 0 ){
            log.enterWait(id);
            System.out.println("Soy niño"+id+"instructor = "+instructor);
 
         try{   wait();}
         catch(Exception e){
 
           }
 
 
        }
        kid ++;
       System.out.println("Niño entrando notificando...."+kid);
        return log.swims(id);
    }
 
    public synchronized long kidRests(int id) {
 
        kid --;
        System.out.println("Niño saliendo notificando...."+kid);
        notifyAll();
 
        return log.rests(id);
    }
 
 
    public synchronized long instructorSwims(int id) {
        instructor++;
      System.out.println("Instructor entrando...."+instructor);
        notifyAll();
        return log.swims(id);
    }
 
 
    public synchronized long instructorRests(int id) {
 
        while(kid==0){
            try{
                log.enterWait(id);
 
                System.out.println("Instructor esperando....");
                wait();
 
               }catch(Exception e){
 
               }
           }
         instructor--;
          System.out.println("Instructor sale...."+instructor);
 
 
        return log.rests(id);
    }
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