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

时间:2011-11-05 10:48:40

标签: java

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

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

而且我不确定我是否知道正确答案:

我认为对象发布是将对象(变量)状态放入堆内存时。而线程之间共享的对象(变量)则需要它。

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

提示:这个问题是故意以非严格和严格的方式形成的 - 这就是它的抓地力。

3 个答案:

答案 0 :(得分:19)

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

关于此问题的经典文本(以及许多其他与线程相关的事项)是Java Concurrency in Practice。如果你没有这个副本,并且不能打扰盗版PDF,不是我建议你这样做,而且即使你做了或者可以,你应该留意强大的CERT Oracle Secure编写Java的标准建议Do not publish partially initialized objects

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

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

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