JavaRush /Java блог /Архив info.javarush /Синхронизация и её корректное использование.
catalystlip
20 уровень
Lipetsk

Синхронизация и её корректное использование.

Статья из группы Архив info.javarush
Мини введение. Убился, решая две бонусные задачи CrUD 17 лвла. Готов был задушить составителей этих задач, но оба раза не принималось по моей вине (тупо забывал убрать код для тестирования кода :)). Так что, разрабы, извините, если что, проклятия с вас снял)) Но не об этом сейчас... Проблема. Хочется с людьми поспорить на тему: какие методы нуждаются в синхронизации, в синхронизации по классу или его объекту или вообще по чему-нибудь ещё))) Проштудировал лекции 17 уровня, читал главу про трэды Эккеля (ну и мудрёно пишет, философ), но мог что пропустить, поэтому не сильно пинайте) Для примера возьмём ту самую бонусную задачу CrUD Batch. Код не ищите, всё нужное сейчас здесь будет)) Есть там список, поле класса: public static List allPeople = new ArrayList(); Не вдаваясь в подробности, скажу, что список редактируется числом методов (ну или просто используется ими). Начал я вроде как книгу писать, но в принципе на этом повествование заканчивается. Вот вам эти методы, прошу объяснить, какие из них и как нужно синхронизировать (ну или хотя бы ткните в какую-нибудь ссылку носом))). public static void create(String name, String sex, String bd) throws ParseException { if (sex.equals("м")) allPeople.add(Person.createMale(name, inFormat.parse(bd))); else if (sex.equals("ж")) allPeople.add(Person.createFemale(name, inFormat.parse(bd))); System.out.println(allPeople.size() - 1); } public static void update(int id, String name, String sex, String bd) throws ParseException { if (sex.equals("м")) { allPeople.get(id).setName(name); allPeople.get(id).setSex(Sex.MALE); allPeople.get(id).setBirthDay(inFormat.parse(bd)); } else if (sex.equals("ж")) { allPeople.get(id).setName(name); allPeople.get(id).setSex(Sex.FEMALE); allPeople.get(id).setBirthDay(inFormat.parse(bd)); } } public static void delete(int id) { allPeople.get(id).setBirthDay(null); } public static void info(int id) { System.out.println(allPeople.get(id).getName() + (allPeople.get(id).getSex().equals(Sex.MALE) ? " м " : " ж ") + outFormat.format(allPeople.get(id).getBirthDay())); }
Комментарии (1)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
HansNoodles Уровень 31
25 апреля 2016
1) Создай многопоточное окружение из которого попробуй воспользоваться приведенными тобой методами без синхронизации.
2) Сравни полученный результат с ожидаемым.
3) Внеси изменения, если они нужны и проверь еще раз.