Ну что, школьнички…

Jul 10, 2012 00:37

Итак, стажировка началась.

На первой неделе у нас чудесный и добрый интенсив по Java. Сегодняшний входной срез показал, что группу можно разделить пополам на шарящих и не шарящих. По крайней мере, каждая из наркомовских троек (шучу-шучу, проверяли парами) успела одного из студентов загнобить, а у второго обнаружить неплохие знания, хотя и не без ( Read more... )

поток мысли, Макаренко

Leave a comment

ext_707972 July 9 2012, 18:55:22 UTC
А что такое "доступ извне"?

Reply

olegg_lieangel July 10 2012, 00:01:56 UTC
Извне класса. Геттер есть или просто не приватное поле. Тогда ж кто угодно может объект заполучить и по нему же засинхронизоваться.

Reply

ext_707972 July 10 2012, 06:52:14 UTC
Видимо не видать мне места в первой группе :)

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

Reply

olegg_lieangel July 10 2012, 07:23:48 UTC
Проблема в том, что «злоумышленник» может синхронизоваться по тому же монитору и в блоке синхронизации зависнуть намертво, тогда ты виснешь, хотя в логике твоего кода ошибок нет. И если примитив явно отдаётся, это ещё ничего, а если неявно (пул строк в джаве, например), то тут как раз и приходит чёртик с ведром гвоздей.

Reply

ext_707972 July 10 2012, 07:38:24 UTC
Я в целом согласен, что скрывать следует чем больше тем лучше. Но ведь потомкам в Джаве принято доверять. Это во-первых. Во-вторых, в случае, когда отдается что то небезопасное - об этом обычно достаточно написать в комментариях. Например, коллекции данных часто отдаются для чтения, под "честное слово", что принимающий не будет их изменять.

Мне такая практика не очень то нравится, но так везде в Джаве. Не вижу чем мониторы принципиально отличаются.

Reply

olegg_lieangel July 10 2012, 08:12:26 UTC
Ну давай все поля пабликом хуячить, если мы такие доверчивые, а? :)

Вот все эти штуки типа указания в комментариях - это хорошо, да. Но они перекладывают на разработчика функции компилятора/IDE/прочих инструментов. Лучше пусть меня по рукам ударит, чем придётся во время дебага искать, а что там мне посоветовал делать разработчик тулзы где-то в джавадоках/другом источнике информации. Примитив синхронизации по сравнению с остальными накладными расходами весит доли процентов, так что экономить на спичках за счёт всяких джентльменских соглашений - не айс.

Reply


Leave a comment

Up