Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Avro序列化:哪些部件是和不是';t线程安全?_Java_Multithreading_Serialization_Avro - Fatal编程技术网

Java Avro序列化:哪些部件是和不是';t线程安全?

Java Avro序列化:哪些部件是和不是';t线程安全?,java,multithreading,serialization,avro,Java,Multithreading,Serialization,Avro,我在网上不同的地方看到了一些相互矛盾的信息,所以我希望有人能给我一个权威性的回答,谁知道呢 假设我正在将一些内容序列化到avro: class StuffToAvro { private final Schema schema; StuffToAvro(Schema schema) { this.schema = schema } void apply(GenericRecord stuff, OutputStream out) {

我在网上不同的地方看到了一些相互矛盾的信息,所以我希望有人能给我一个权威性的回答,谁知道呢

假设我正在将一些内容序列化到avro:

    class StuffToAvro {
       private final Schema schema;
       StuffToAvro(Schema schema) { this.schema = schema }

       void apply(GenericRecord stuff, OutputStream out) {
         final Encoder encoder = EncoderFactory.get.binaryEncoder(out, null);
         final GenericDatumWriter writer = new GenericDatumWriter(schema);
         writer.write(stuff, encoder):
       }
    }
问题是我是否可以/应该通过重用编码器和写入程序来优化它,如果应该,正确的方法是什么:我可以预先初始化写入程序并将其设置为
final
,或者它需要是
ThreadLocal

关于编码器的一个类似问题:我应该记住上一个实例并将其传递给
getbinarycoder
以重用,还是也需要一个
ThreadLocal

在每种情况下,如果答案是
ThreadLocal
,我还想知道这样的优化是否值得这么复杂:每次创建一个全新的编写器和/或编码器而不是重用它们是否真的很昂贵

此外,我假设,无论我在这里得到什么答案,也适用于阅读/解码。是这样吗

感谢你的指点

谢谢大家!

根据这个

是的,一个DatumReader实例可以在多个线程中使用。编码器 和解码器不是线程安全的,但DatumReader和DatumWriter是线程安全的

写入程序也是线程安全的

是,重新使用单个GenericDatumWriter写入多个对象 应该提高绩效