Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 1 / 0
Регистрация: 01.11.2020
Сообщений: 616

Правильно ли перенос синхронный метод

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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.02.2022, 00:27
Ответы с готовыми решениями:

Почему синхронный JK триггер работает не правильно?
На микросхеме 7472 я собрал синхронный JK триггер. Он должен переключаться сразу после импульса, то есть по заднему фронту. Он же...

Синхронный метод загрузки HttpClient
Нужна синхронная альтернатива данной конструкции: private async void CheckIT() { HttpClient client = CreateClient(proxy); ...

Метод lfind(), как правильно написать метод сравнения?
Всем привет. У меня задача предельно проста. Есть массив char M;, В него пихаем всё, что содержится в файле while(!(feof(f))) { ...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.02.2022, 00:27
Помогаю со студенческими работами здесь

Перенос строки в метод
Доброго времени. Я пользуюсь FileSystemWatcher. И мне необходимо перенести значение строки в один из его методов. Весь код: using...

Как правильно сделать перенос записи из одно таблицы в другую
Такой вопрос. Имеется БД на Firebird. В ней 2 одинаковые таблицы: Document1 и Document2 в каждой из них допустим поля nomrec и...

Синхронный сервер
Здравствуйте. на С сижу только пол года. Так что я еще новичек. Пишу сейчас программу клиент-серверную. Смысл в том, что есть сервер на...

Синхронный RS-триггер
Помогите, пожалуйста:-[ На рисунке изображен синхронный RS-триггер . установить на его прямом выходе высокий , а на инверсном низкий...

Синхронный Поиск
Как реализовать синхронный поиск ? Как только пользователь вводит слово автоматически происходит поиск из списка


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru