我想我在上一次Jena(2.13)中发现了一个错误。
如果我在包含多个图形元组的DatasetGraph(用DatasetGraphFactory.createMem()实例化)上调用clear(),我会得到一个ConcurrentModificationException。
您可以使用以下代码重现错误:
public static void main(String[] args) {
DatasetGraph dsg = DatasetGraphFactory.createMem();
dsg.add(
new Quad(NodeFactory.createURI("http://graph1"),
NodeFactory.createURI("http://subj"),
RDF.type.asNode(),
NodeFactory.createURI("http://someType")));
dsg.add(
new Quad(NodeFactory.createURI("http://graph2"),
NodeFactory.createURI("http://subj"),
RDF.type.asNode(),
NodeFactory.createURI("http://someType")));
dsg.clear();
}
有没有办法避免这种情况?
最佳, 弗拉维奥
答案 0 :(得分:0)
最简单的解决方法是将dsg.clear
替换为
dsg = DatasetGraphFactory.createMem() ;
让垃圾收集器处理它。或者这个:
dsg.getDefaultGraph().clear() ;
List<Node> graphNames = Iter.toList(dsg.listGraphNodes()) ;
for ( Node gn : graphNames ) {
dsg.removeGraph(gn);
}