作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我定义了以下 protobuf 消息:
message Counts {
repeated int32 counts = 1;
}
在线程间共享R
和 W
作为 build 者:
private final Counts.Builder countsBuilder;
线程 R
只会读取 countsBuilder
和 W
只会写入 countsBuilder
.共享构建器将被读取、写入和(在某个时候)构建并通过网络发送。
据我所知,并发读取消息没问题,但开发人员必须在更高级别同步其他任何内容吗?那么,我实际上不能同时写入和读取共享构建器吗?
如果这本身不是线程安全的,我正在考虑使用某种线程安全的 Collection<Integer>
我将用它来读/写,并且(在某个时候)会在通过网络发送之前创建一条全新的消息。还是我遗漏了什么?
谢谢!
编辑 1:我正在使用 protobuf 2.4.1 和 java 6
编辑 2:一些术语和拼写修复。
最佳答案
如果同步读取和写入应该没问题:
synchronized (countsBuilder) {
// modify countsBuilder
}
但请记住,您还需要确保在构建消息时没有任何竞争条件;构建消息后,不允许编写器线程进行任何写入。
关于java - java中的protobuf是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10258534/
我是一名优秀的程序员,十分优秀!