Throwing in my two cents. I think it's instructive to think about the poor programmer rather then the underlying OS. I'm not sure that either behavior is particularly intuitive. It seems reasonable to assume that synchronization must be used if the created thread wants to access the memory of the creating thread. Requiring the writes between the create and start to be visible is, in any event, inconsistent with all other visibility rules, all of which require synchronized or volatile. Moreover, it's at times convenient for all thread-creation overhead to be buried in start() rather than the constructor. This way you can create an array of the things and incur no overhead until the array elements are actually started.
JavaMemoryModel mailing list - http://www.cs.umd.edu/~pugh/java/memoryModel
This archive was generated by hypermail 2b29 : Thu Oct 13 2005 - 07:00:26 EDT