我正在编写一个库类,我将有多个方法都需要从这种代码开始:
JAXBContext jc = JAXBContext.newInstance(MODEL_PACKAGE);
Marshaller m = jc.createMarshaller();
Unmarshaller um = jc.createUnmarshaller();
所以我想重用这三个对象 - 上下文,编组和unmarshaller(即我想构建它们一次,并将它们保存为对象/实例字段/变量)。
所以...我想知道他们是1)无国籍和2)线程安全吗?
1)我的意思是,一旦我使用,例如我的一种方法中的编组器可以在另一种方法中重用它而不用担心它可以包含我之前使用它时的一些剩余数据吗?
2)这些对象也是线程安全的,即我可以假设我的库类可以从多个线程调用而没有任何风险,或者不是(如果我将这些对象存储为对象变量)?
答案 0 :(得分:1)
JAXBContext - 是线程安全的,可以(并且必须)是单例。创造是昂贵的操作。
Marshaller和Unmarshaller 不是线程安全的!。你必须每次都创建它们。创作并不昂贵,几乎没有时间(不到1毫秒)。