How*_*wie 5 java thread-safety protocol-buffers
我定义了以下 protobuf msg:
message Counts {
repeated int32 counts = 1;
}
Run Code Online (Sandbox Code Playgroud)
它在线程之间共享R并W作为构建器共享:
private final Counts.Builder countsBuilder;
Run Code Online (Sandbox Code Playgroud)
线程R只会读取countsBuilder和W只会写入countsBuilder. 共享构建器将被读取、写入和(在某个时候)构建和通过网络发送。
AFAIK,对消息的并发读取很好,但是开发人员必须在更高级别同步其他任何内容吗?所以,我实际上不能同时写入和读取共享构建器?
如果这不是本质上线程安全的,我正在考虑使用某种线程安全的Collection<Integer>,我将用于读/写,并且(在某个时候)将在通过网络发送之前创建一个全新的消息。或者我错过了什么?
谢谢!
编辑 1:我使用 protobuf 2.4.1 和 java 6
编辑 2:一些术语和拼写修复。
如果同步读取和写入,应该没问题:
synchronized (countsBuilder) {
// modify countsBuilder
}
Run Code Online (Sandbox Code Playgroud)
但请记住,您还需要确保构建消息时不存在任何竞争条件;消息构建后,写入线程不允许进行任何写入操作。
| 归档时间: |
|
| 查看次数: |
2625 次 |
| 最近记录: |