I read this question about how to do Double-checked locking:
// Double-check idiom for lazy initialization of instance fields
private volatile FieldType fiel
No, this would not work.
final does not guarantee the visibility between threads that volatile does. The Oracle doc you quoted says that other threads will always see a correctly constructed version of an object's final fields. final guarantees that all final fields have been constructed and set by the time an objects constructor has finished running. So if object Foo contains a final field bar, bar is guaranteed to be constructed by the time Foo's constructor has finished.
The object referenced by a final field is still mutable though, and writes to that object may not be correctly visible across different threads.
So in your examples, other threads are not guaranteed to see the FieldHolder object that has been created and may create another, or if any modifications happen to the state of the FieldType object, it is not guaranteed that other threads will see these modifications. The final keyword is only guaranteeing that once the other threads do see the FieldType object, its constructor has been called.