Как стать автором
Обновить
23
0
Сергей Б. @sergey-b

Пользователь

Отправить сообщение
Надо будет попробовать.
Что вы, это же обращение к геокодеру. Можно превысить лимит в 25000 запросов в сутки и совсем лишиться возможности использовать API Яндекса.
Спасибо автору за полезный пример.
Возвращать надо не java.sql.Connection, а обертку, у которой метод close() возвращает соединение в пул. Ведь Connection у нас реализует интерфейс AutoCloseable.
Я очень быстро разобрался с такими мыслями. Код я пишу так:

1. Подумал о правах доступа? — Пишу в комментарии: «Файлы создаются с правами доступа по умолчанию. Желающие изменить права доступа на особые призываются сделать это после вызова данного метода».

2. Подумал о занятии файла другим приложением? — Пишу в комментарии: «Класс рассчитывает на то, что другие приложения не будут открывать указанный файл во время выполнения данного метода».

3. Подумал о многопоточности? — Пишу: «Внимание! Класс не thread-safe».

4. Пришла мысль об атомарных операциях? — См. пункт 3.

5. О фреймворках? — Завожу тикет в джире на будущий рефакторинг.

6. О разных файловых системах за меня подумали разработчики виртуальной машины Java.

7. О количестве файлов в директории пусть думают сисадмины.

8. О предсказуемых названиях временных файлов я уже заранее подумал, поэтому у меня есть проверенные заготовки.

9. Появились сомнения качестве моего ГСПЧ? — // TODO использовать безоспасный Random.

10. Нормальная документация? Да вот же она. Уже готова.

Данная проблема называется «увеличения скоупа работ». Это стандартный проектный риск. Существует несколько способов управления данным риском. То, что я описал, это самый универсальный метод, остальные желательно согласовывать с заказчиком.
Судя по всему, вот эта настройка дает такую диагностику.

<habracut/>

image
Вроде, все по дефолту. Недавно поставил себе Eclipse Kepler Service Release 2.
Эта ветка дискуссии началась с того, что ваш пример делает то же самое. Я просто показал, что различия в поведении наших классов все-таки есть.
Что значит, «нормально»? Обработать ошибку и повторно вызывать getInstance() уже не получится.
Спасибо за цитату. Я это тоже где-то читал, поэтому везде полагался на безопасность final-полей.
Я лично пришел к выводу, что опасная публикация, без happens-before на практике не нужна никогда.


Я, пожалуй, с вами соглашусь. Лучше сделать код понадежнее, чем потом отлавливать неочевидные эффекты многопоточности.
В вашем примере нельзя так делать, зато бывает много ситуаций, когда создание лишнего экземпляра не вызывает проблем.
Я не очень представляю, где тут может помочь volatile. Предположим, поле accessor я сделал volatile. Что изменится? Доступ к экземпляру целевого класса у меня осуществляется через промежуточное поле с модификатором final, а его корректное значение вроде бы гарантируется.
Правда что ли?

Не узнал.
1. Вы полагаете, что в каком-нибудь потоке будет ссылка на не до конца проинициализированный экземпляр целевого класса?

2. Вот, что Eclipse мне пишет: Read access to enclosing field TestClass.testField is emulated by a synthetic accessor method. Change visibility of 'testField' to default. Никогда не вдавался в подробности, что это такое, апросто ставил видимость default.

3. Согласен.
Согласен. Все глобальные объекты инициализируешь до того, как потоки начнут с ними работать. И никакие синглтоны не нужны.

Либо можно забить на то, что при определенных обстоятельствах вдруг родится не один экземпляр а целых два.
Да, я уже сам пожалел, что выбрал синглтон для примера.

Вы не знаете, есть ли у данного способа устоявшееся название? Я его назвал function pointer, потому что его на C можно реализовать при помощи указателей на функции. Среди объектно-ориентированных паттернов мне почему-то ничего похожего не попадалось.
А что будет, если из конструктора Something вылетит исключение?
12 ...
49

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Работает в
Зарегистрирован
Активность