-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathAerei.java
More file actions
121 lines (96 loc) · 2.41 KB
/
Copy pathAerei.java
File metadata and controls
121 lines (96 loc) · 2.41 KB
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
class Aereo{
private static int n;
private int num;
private String direzione;
Aereo(String d){num=n++;direzione=d;}
//ATTENZIONE: invocare questo metodo quando l'aereo è in pista
public void stampa(){System.out.println("Aereo num "+num+" - "+direzione);}
}
class GeneraArrivi extends Thread{
private Controllore contr;
GeneraArrivi(Controllore c){contr=c;}
public void run(){
while(true){
contr.add_arrivi(new Aereo("in arrivo"));
}
}
}
class GeneraPartenze extends Thread{
private Controllore contr;
GeneraPartenze(Controllore c){contr=c;}
public void run(){
while(true){
contr.add_partenze(new Aereo("in partenza"));
}
}
}
class Controllore extends Thread{
Object pista=new Object();
private Vector<Aereo> coda_arrivi=new Vector<Aereo>();
private Vector<Aereo> coda_partenze=new Vector<Aereo>();
public void add_arrivi(Aereo a){
synchronized (coda_arrivi){
coda_arrivi.add(a);
coda_arrivi.notifyAll();
}
}
public void add_partenze(Aereo a){
synchronized (coda_partenze){
coda_partenze.add(a);
coda_partenze.notifyAll();
}
}
public void gestisci_arrivo(){
Aereo a=null;
synchronized(coda_arrivi){
if(coda_arrivi.isEmpty()){
new TS(coda_arrivi).start();
return;
}
else{
a=coda_arrivi.remove(0);
}
}
synchronized(pista){
a.stampa();
}
}
public void gestisci_partenza(){
Aereo a=null;
synchronized(coda_partenze){
if(coda_partenze.isEmpty()){
new TS(coda_partenze).start();
return;
}
else{
a=coda_partenze.remove(0);
}
}
synchronized(pista){
a.stampa();
}
private char prox_transito(){
int r=(int)(Math.random()*2);
if(r==0) return 'A';
else return 'P';
}
public void run(){
while(true){
char c=prox_transito();
if(c=='A') gestisci_arrivo();
else gestisci_partenza();
}
}
private class TS extends Thread{
Vector<Aereo> coda;
TS(Vector<Aereo> s){coda=s;};
public void run(){
}
}
public static void main(String[] args){
Controllore contr=new Controllore();
GeneraArrivi gA=new GeneraArrivi(contr);
GeneraPartenze gP=new GeneraPartenze(contr);
gP.start(); gA.start(); contr.start();
}
}