-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy path2app.java
125 lines (109 loc) · 2.41 KB
/
2app.java
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
122
123
124
125
public class PassaggioLivello{
public static void main(String[] a){
Casello c=new Casello();
c.start();
for(int i = 0; i<7;i++){
new Auto(c).start();
}
Treno=new Treno(c); t.start();
}
}
class Treno extends Thread{
private int distanza= 100;
private Casello cc;
Treno(Casello c){
cc=c;
}
public void run(){
try{
while(distanza>50){
distanza--;
Thread.sleep((int)Math.random()*3);
}
cc.trenoInAvvicinamento();
while(distanza>0){
distanza--;
Thread.sleep((int)Math.random()*3);
}
System.out.println("treno attreversa il passaggio a livello");
cc.passaTreno();
}catch(InterettuptedException e){}
}
}
class Auto extends Thread{
private static int num;
private inte numero;
private int distanza=100;
Auto(Casello c){numero=num++; cc=c;}
public void run(){
cc.add();
try{
while(distanza>0){
Thread.sleep((int)Math.random()*10);
if(cc.aperto()){
distanza--;
System.out.println("Auto " +numero+"avanza ");
}else{
System.out.println("auto " + numero + "attende che riapranole sbarre");
synchronized(this){
while(!cc.aperto())
this.wait();
}
System.out.println("auto " + numero + "riprende la marcia");
}
}
System.out.println("auto " + numero + " passa");
}catch(InterettuptedException e){}
}
}
class Casello extends Thread{
private Auto[] autoInArrivo=new Auto[10];
private boolean trenoInArrivo =false;
private boolean trenoPassato=false;
private boolean sbarreSu=true;
public synchronized void add(Auto a){
autoInArrivo[sizecoda]=a;
sizecoda++;
}
public synchronized boolean aperto(){
return sbarreSu;
}
public synchronized trenoInAvvicinamento(){
System.out.println("treno in arrivo");
trenoInArrivo=true;
this.notify();
}
public synchronized passaTreno(){
System.out.println("treno passa il passaggio livello");
trenoPassato=true;
this.notify();
}
private synchronized void abbassaSbarre(){
sbarreSu=false;
}
private synchronized alzaSbarre(){
sbarreSu=true;
for (int i=0; i<sizecoda; i++){
Auto a=autoInArrivo[i];
synchronized(a){
a.notify();
}
}
}
public void run(){
try{
synchronized(this){
while(trenoInArrivo==false){
wait();
}
abbassaSbarre();
while(trenoPassato==false){
wait();
}
alzaSbarre();
System.out.println("alzate le sbarre");
}
}catch(InterettuptedException e){}
}
}
}