什么是对象发布?为什么我们需要它?

在我为Java Developer进行的一次面试中,我被问到一个问题:

什么是对象发布?为什么我们需要它?

我不确定我知道正确的答案:

我认为对象发布是指将对象(变量)状态放入堆内存时。 并且线程之间共享对象(变量)是必需的。

我对吗? 如果我错了,请纠正我。 我一直在搜索Java语言规范,但没有发现任何可以毫不含糊地回答这个问题的内容。

提示:这个问题是故意以非严格和准确的方式形成的 – 这就是它的关键。

你的答案非常接近。 我将对象发布定义为一个线程对另一个线程可见的对象进行引用的行为。 通常,这与对象创建有关:您需要确保以这样的方式发布新创建的对象,使得另一个线程将在初始化状态下看到它。

关于此(以及许多其他与线程相关的事项)的经典文本是Java Concurrency in Practice 。 如果你没有那个副本,并且不能打扰盗版PDF,那不是我建议你这样做,而且即使你做了或者可以,你应该留意强大的CERT Oracle Secure Java编写标准建议您不要发布部分初始化对象 。

发布Object基本上只是创建一个Object的实例,因此该对象可供相应的引用使用。 通常,它是在安全发布对象的意义上引用的,这意味着没有人应该能够在不一致的状态下看到该对象。 即它不应该在完全构造之前使用。

但是从定义的角度来看,它只是实例化一个对象,这又意味着对象的发布

“对象发布”不是一个既定的技术术语,当然也不是Java生态系统中的术语。 它似乎是Python Web框架Zope名称的一部分。

我的猜测是,你的采访者要么在他们的公司内使用这个术语,也不知道这个,或者这个问题是为了过滤掉那些不能承认他们不知道的东西的人,而是会编造东西。