java中的protobuf是线程安全的吗?

How*_*wie 5 java thread-safety protocol-buffers

我定义了以下 protobuf msg:

message Counts {
    repeated int32 counts = 1;
}
Run Code Online (Sandbox Code Playgroud)

它在线程之间共享RW作为构建器共享:

private final Counts.Builder countsBuilder;
Run Code Online (Sandbox Code Playgroud)

线程R只会读取countsBuilderW只会写入countsBuilder. 共享构建器将被读取、写入和(在某个时候)构建和通过网络发送。

AFAIK,对消息的并发读取很好,但是开发人员必须在更高级别同步其他任何内容吗?所以,我实际上不能同时写入和读取共享构建器?

如果这不是本质上线程安全的,我正在考虑使用某种线程安全的Collection<Integer>,我将用于读/写,并且(在某个时候)将在通过网络发送之前创建一个全新的消息。或者我错过了什么?

谢谢!

编辑 1:我使用 protobuf 2.4.1 和 java 6

编辑 2:一些术语和拼写修复。

Jes*_*erE 2

如果同步读取写入,应该没问题:

synchronized (countsBuilder) {
   // modify countsBuilder
}
Run Code Online (Sandbox Code Playgroud)

但请记住,您还需要确保构建消息时不存在任何竞争条件;消息构建后,写入线程不允许进行任何写入操作。