Что такое публикация объектов и зачем она нам нужна?

Во время одного из моих собеседований для Java Developer мне задали вопрос:

Что такое публикация объектов и зачем она нам нужна?

И я не уверен, что знаю правильный ответ:

Я думаю, что публикация объектов - это когда состояние объекта (переменной) помещается в кучу памяти. И это необходимо для обмена объектами (переменными) между потоками.

Я прав? Пожалуйста, поправьте меня, если я ошибаюсь. Я искал спецификацию языка Java, но не нашел ничего, что бы однозначно ответить на этот вопрос.

Подсказка: Вопрос намеренно формируется не строгим и точным способом - это его улов.

Ответы

Ответ 1

Ваш ответ был довольно близким. Я бы назвал публикацию объекта в качестве действия одним потоком ссылки на объект, видимый для другого потока. Обычно это связано с созданием объекта: вам нужно убедиться, что вновь созданный объект опубликован таким образом, что другой поток увидит его в инициализированном состоянии.

Классический текст этого (и многих других связанных с потоком вопросов) Java Concurrency на практике. Если у вас нет такой копии, и вы не можете беспокоиться о том, чтобы google создать пиратский PDF, не то, что я предлагаю вам это сделать, и даже если вы это сделаете или можете, вы должны прислушаться к могущественному CERT Oracle Secure Стандарт кодирования для Java советует вам Не публиковать частично инициализированные объекты.

Ответ 2

Публикация объекта в основном представляет собой создание экземпляра объекта и, следовательно, этот объект доступен для использования по соответствующей ссылке. Обычно это передается в том смысле, что объекты должны быть безопасно опубликованы, а это значит, что никто не должен видеть этот объект в несогласованном состоянии. т.е. он не должен быть доступен для использования до тех пор, пока он не будет полностью построен.

Но в определении точки зрения это ничего, кроме экземпляра объекта, который снова означает публикацию объекта

Ответ 3

"Публикация объектов" не является установленным техническим термином, конечно, не в экосистеме Java. Это похоже на имя Zope, веб-рамки Python.

Я предполагаю, что ваши интервьюеры используют этот термин в своей компании и не знают об этом, или вопрос должен был отфильтровывать людей, которые не могут признать, что есть что-то, чего они не знают, и вместо этого будут составлять материал.