关于DatasetGraph.clear()的Jena ConcurrentModificationException

时间:2015-07-02 15:04:28

标签: exception jena concurrentmodification

我想我在上一次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();
}

有没有办法避免这种情况?

最佳, 弗拉维奥

1 个答案:

答案 0 :(得分:0)

最简单的解决方法是将dsg.clear替换为

    dsg = DatasetGraphFactory.createMem() ;

让垃圾收集器处理它。或者这个:

    dsg.getDefaultGraph().clear() ;
    List<Node> graphNames = Iter.toList(dsg.listGraphNodes()) ;
    for ( Node gn : graphNames ) {
        dsg.removeGraph(gn); 
    }