Правильно ли перенос синхронный метод
09.02.2022, 00:27. Показов 342. Ответов 0
мне нужно перенести синхронный метод распределения пассажиров в класс Bus
Как было:
| 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
126
127
128
129
130
131
132
| import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class loop {
public static void main(String[] args) {
Family fam1 = new Family("aa1", "Kalush", 1);
Family fam2 = new Family("bb1", "Kosiv", 2);
Family fam3 = new Family("cc1", "Galych", 3);
Family fam4 = new Family("dd1", "Kolomiya", 4);
Family fam5 = new Family("aa2", "Galych", 1);
Family fam6 = new Family("bb2", "Kolomiya", 2);
Family fam7 = new Family("cc2", "Kosiv", 3);
Family fam8 = new Family("dd2", "Kosiv", 4);
Family fam9 = new Family("aa3", "Galych", 1);
Family fam10 = new Family("bb3", "Galych", 2);
Family fam11 = new Family("cc3", "Galych", 3);
Family fam12 = new Family("dd3", "Galych", 4);
Family fam13 = new Family("aa4", "Kolomiya", 1);
Family fam14 = new Family("bb4", "Kolomiya", 2);
Family fam15 = new Family("cc4", "Kolomiya", 3);
Family fam16 = new Family("dd4", "Kolomiya", 4);
Family fam110 = new Family("aa12", "Kalush", 1);
Family fam21 = new Family("bb12", "Kosiv", 2);
Family fam31 = new Family("cc12", "Galych", 3);
Family fam41 = new Family("dd12", "Kolomiya", 4);
Family fam51 = new Family("aa22", "Galych", 1);
Family fam61 = new Family("bb22", "Kolomiya", 2);
Family fam71 = new Family("cc22", "Kosiv", 3);
Family fam81 = new Family("dd22", "Kosiv", 4);
Family fam91 = new Family("aa32", "Galych", 1);
Family fam101 = new Family("bb32", "Galych", 2);
Family fam111 = new Family("cc32", "Galych", 3);
Family fam121 = new Family("dd32", "Galych", 4);
Family fam131 = new Family("aa42", "Kolomiya", 1);
Family fam141 = new Family("bb42", "Kolomiya", 2);
Family fam151 = new Family("cc42", "Kolomiya", 3);
Family fam161 = new Family("dd42", "Kolomiya", 4);
List<Family> list1 = new ArrayList<>(Arrays.asList(fam1, fam2, fam3, fam4, fam5, fam6, fam7, fam8, fam9, fam10, fam11, fam12, fam13, fam14, fam15, fam16));
List<Family> list2 = new ArrayList<>(Arrays.asList(fam110, fam21, fam31, fam41,
fam51, fam61, fam71, fam81, fam91, fam101, fam111, fam121, fam131,
fam141, fam151, fam161));
Bus b1 = new Bus(1, 6, "Kalush");
Bus b2 = new Bus(2, 7, "Galych");
Bus b3 = new Bus(3, 8, "Kolomiya");
Bus b4 = new Bus(4, 7, "Kosiv");
Bus b5 = new Bus(5, 6, "Kalush");
Bus b6 = new Bus(6, 7, "Galych");
List<Bus> buses = new ArrayList<>(Arrays.asList(b1, b2, b3, b4, b5, b6));
Plane plane1 = new Plane(1, buses, list1);
Plane plane2 = new Plane(2, buses, list2);
plane1.start();
plane2.start();
}
}
class Family {
String name;
String travelTo;
int count;
boolean isSit = false;
public Family(String name, String travelTo, int count) {
this.name = name;
this.travelTo = travelTo;
this.count = count;
}
public void go(List<Bus> buses, int planeID) {
for (Bus bus : buses) {
synchronized (bus) {
if (!this.isSit) {
if (this.travelTo.equals(bus.driveTo) && this.count <= bus.passengersCount) {
bus.passengersCount -= this.count;
try {
Thread.sleep(10);
} catch (Exception e) {
}
bus.families.add(this.name + " - > from plane № " + planeID);
this.isSit = true;
if (bus.passengersCount == 0) {
System.out.println("-------------------------------------------------------" +
"\nBus № " + bus.id + " is full of families: \n" + bus.families + "\nand ready to go");
}
}
}
}
}
}
}
class Plane extends Thread {
List<Family> families;
int id;
List<Bus> buses;
public Plane(int id, List<Bus> buses, List<Family> families) {
this.buses = buses;
this.families = families;
this.id = id;
}
@Override
public void run() {
for (Family fam : families) {
fam.go(buses, this.id);
}
}
}
class Bus {
int id;
int passengersCount;
String driveTo;
List<String> families = new ArrayList<>();
public Bus(int id, int passengersCount, String driveTo) {
this.id = id;
this.passengersCount = passengersCount;
this.driveTo = driveTo;
}
} |
|
как изменил:
| 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
126
127
128
129
130
131
132
133
134
135
136
137
138
| import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class loop {
public static void main(String[] args) {
Family fam1 = new Family("aa1", "Kalush", 1);
Family fam2 = new Family("bb1", "Kosiv", 2);
Family fam3 = new Family("cc1", "Galych", 3);
Family fam4 = new Family("dd1", "Kolomiya", 4);
Family fam5 = new Family("aa2", "Galych", 1);
Family fam6 = new Family("bb2", "Kolomiya", 2);
Family fam7 = new Family("cc2", "Kosiv", 3);
Family fam8 = new Family("dd2", "Kosiv", 4);
Family fam9 = new Family("aa3", "Galych", 1);
Family fam10 = new Family("bb3", "Galych", 2);
Family fam11 = new Family("cc3", "Galych", 3);
Family fam12 = new Family("dd3", "Galych", 4);
Family fam13 = new Family("aa4", "Kolomiya", 1);
Family fam14 = new Family("bb4", "Kolomiya", 2);
Family fam15 = new Family("cc4", "Kolomiya", 3);
Family fam16 = new Family("dd4", "Kolomiya", 4);
Family fam110 = new Family("aa12", "Kalush", 1);
Family fam21 = new Family("bb12", "Kosiv", 2);
Family fam31 = new Family("cc12", "Galych", 3);
Family fam41 = new Family("dd12", "Kolomiya", 4);
Family fam51 = new Family("aa22", "Galych", 1);
Family fam61 = new Family("bb22", "Kolomiya", 2);
Family fam71 = new Family("cc22", "Kosiv", 3);
Family fam81 = new Family("dd22", "Kosiv", 4);
Family fam91 = new Family("aa32", "Galych", 1);
Family fam101 = new Family("bb32", "Galych", 2);
Family fam111 = new Family("cc32", "Galych", 3);
Family fam121 = new Family("dd32", "Galych", 4);
Family fam131 = new Family("aa42", "Kolomiya", 1);
Family fam141 = new Family("bb42", "Kolomiya", 2);
Family fam151 = new Family("cc42", "Kolomiya", 3);
Family fam161 = new Family("dd42", "Kolomiya", 4);
List<Family> list1 = new ArrayList<>(Arrays.asList(fam1, fam2, fam3, fam4, fam5, fam6, fam7, fam8, fam9, fam10, fam11, fam12, fam13, fam14, fam15, fam16));
List<Family> list2 = new ArrayList<>(Arrays.asList(fam110, fam21, fam31, fam41,
fam51, fam61, fam71, fam81, fam91, fam101, fam111, fam121, fam131,
fam141, fam151, fam161));
Bus b1 = new Bus(1, 6, "Kalush");
Bus b2 = new Bus(2, 7, "Galych");
Bus b3 = new Bus(3, 8, "Kolomiya");
Bus b4 = new Bus(4, 7, "Kosiv");
Bus b5 = new Bus(5, 6, "Kalush");
Bus b6 = new Bus(6, 7, "Galych");
List<Bus> buses = new ArrayList<>(Arrays.asList(b1, b2, b3, b4, b5, b6));
Plane plane1 = new Plane(1, buses, list1);
Plane plane2 = new Plane(2, buses, list2);
plane1.start();
plane2.start();
}
}
class Family {
String name;
String travelTo;
int count;
boolean isSit = false;
public Family(String name, String travelTo, int count) {
this.name = name;
this.travelTo = travelTo;
this.count = count;
}
}
class Plane extends Thread {
List<Family> families;
int id;
List<Bus> buses;
public Plane(int id, List<Bus> buses, List<Family> families) {
this.buses = buses;
this.families = families;
this.id = id;
}
@Override
public void run() {
for (Bus buse: buses) {
for (Family family: families){
buse.go(buses, this.id, family);
}
}
}
}
class Bus {
int id;
int passengersCount;
String driveTo;
List<String> families = new ArrayList<>();
public Bus(int id, int passengersCount, String driveTo) {
this.id = id;
this.passengersCount = passengersCount;
this.driveTo = driveTo;
}
public void go(List<Bus> buses, int planeID, Family family) {
for (Bus bus : buses) {
synchronized (this) {
if (!family.isSit) {
if (family.travelTo.equals(bus.driveTo) && family.count <= bus.passengersCount) {
bus.passengersCount -= family.count;
try {
Thread.sleep(10);
} catch (Exception e) {
}
bus.families.add(family.name + " - > from plane № " + planeID);
family.isSit = true;
if (bus.passengersCount == 0) {
System.out.println("-------------------------------------------------------" +
"\nBus № " + bus.id + " is full of families: \n" + bus.families + "\nand ready to go");
}
}
}
}
}
}
} |
|
0
|