Is there a technical explanation as to why Throwable.initCause is synchronized when Throwable.getCause and the constructor Throwable.Throwable(Throwable cause) aren't? I am considering the memory model for
java 1.4.
I mean, what use is it that initCause is synchronized when getCause isn't? Even though one
thread calls initCause, and the cause field is flushed to shared memory because of synchronization, there is no guarantee that another thread calling getCause will read anything meaningful.
Please tell me that I'm getting this right!