On Feb 20, 2012, at 8:25 , Frank Durden wrote:
> I'm sorry if this is explained somewhere, I couldn't find an answer.
> Are protobuf messages (in Java) thread safe for concurrent reads. I
> guess they're immutable in the sense that you can't modify them after
> they're built, but can a message object content be read from different
> threads safely? The generated variables in message objects don't seem
> to be final or volatile?

After you call .build() and get a Message, that message is immutable, as you 
observed. I'm not a Java memory model expert, but my understanding is that 
despite the fields not being market final, this is in fact thread-safe. 
However, my only support is this quote from Brian Goetz:

"With some additional work, it is possible to write immutable classes that use 
some non-final fields (for example, the standard implementation of String uses 
lazy computation of the hashCode value), which may perform better than strictly 
final classes."


I'm pretty sure the right people at Google have examined the protobuf code, so 
it should be safe. However, I don't have a good argument for *why* it is safe. 
Maybe someone who is a Java memory model expert knows the reasoning here?



You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To post to this group, send email to protobuf@googlegroups.com.
To unsubscribe from this group, send email to 
For more options, visit this group at 

Reply via email to