I'm reading the Java Concurrency in Practice book.
When reading the chapter about JMM, it says:
The JMM defines a partial ordering called happens-before on all actions within the program. To guarantee that the thread executing action B can see the results of action A (whether or not A and B occur in different threads), there must be a happens-before relationship between A and B.
However, I can't use any happens-before rule to derive the "Initialization safety" rule:
Initialization safety guarantees that for properly constructed objects, all threads will see the correct values of final fields that were set by the constructor, regardless of how the object is published.
Can we use happens-before rules to derive the "Initialization safety" rule, or are these two concepts just same level abstraction?