构造不当的对象是否只会影响它在构造函数中发布的线程的可见性?

Does improperly constructed object only affect visibility for the thread it publishes inside of tbe constructor?

http://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html#finalRight

The values for an object's final fields are set in its constructor. Assuming the object is constructed "correctly", once an object is constructed, the values assigned to the final fields in the constructor will be visible to all other threads without synchronization. In addition, the visible values for any other object or array referenced by those final fields will be at least as up-to-date as the final fields. What does it mean for an object to be properly constructed? It simply means that no reference to the object being constructed is allowed to "escape" during construction.

这是否意味着只有看到构造不当的对象的线程可能会看到它处于错误状态,但所有其他线程都没有问题?

例如假设你有一些简单的代码

public class Foo {
  final int x = 5;
  public Foo() {
      new Thread(() -> System.out.print(x)).start();
  }
}

这是否意味着只有看到隐式 this 引用的线程可能有可见性问题,但是任何其他使用 Foo 实例的线程都保证看到完全可见的 Foo 引用并且它的字段 x 是 5?

JLS 状态,

An object is considered to be completely initialized when its constructor finishes. A thread that can only see a reference to an object after that object has been completely initialized is guaranteed to see the correctly initialized values for that object's final fields.

没有迹象表明对一个线程的可见性保证会受到针对另一个线程的不安全发布的影响。