In JLS, §17.4.5. Happens-before Order, it says that
A program is correctly synchronized if and only if all sequentially consistent executions are free of data races.
It only give us definition about “sequentially consistent”, it does not give us definition about “sequentially consistent executions”. Only after knowing about what is “sequentially consistent executions”, we may make further discussion about the topic.
So what’s “sequentially consistent executions” and what’s “sequentially consistent executions are free of data races”?
An execution has a very simple formal definition: it is simply a total ordering on the set of all memory actions that is under consideration.
A sequentially consistent execution is represented by any total ordering on actions which is sequentially consistent.
The term “free of data races” is also precisely defined by the JLS.
Note that the JLS does not require sequential consistency. In fact, the whole formalism of happens-before exists in order to define precisely the terms under which sequentially inconsistent executions can maintain an illusion of sequential consistency.