关于线程安全

时间:2015-11-04 05:39:27

标签: neo4jclient

https://github.com/Readify/Neo4jClient/wiki/connecting#threading-and-lifestyles中,它提到每个数据库应该只有一个实例。如果我想使用多线程,我可以创建多个实例吗?例如,我想做以下事情:

main() {
    for ( int i = 0 ; i < 10 ; ++i )
        ( new System.Threading.Thread( newUser() ) ).Start() ;
}
void newUser() {
    var client = new GraphClient(new Uri("http://localhost:7474/db/data"));
    client.Connect();
    /* do sth... */
}

因为我想模拟多用户场景。我试过这个代码,看起来效果很好。为什么说文件中我的数据库只有一个实例?

1 个答案:

答案 0 :(得分:1)

你可以做你想做的事!它只是一个建议,在典型情况下,您只有一个实例并使用它来节省对Connect等的额外调用。

我们试图阻止的主要事情是某人有这样的方法:

private static Element Get() {
    var client = new GraphClient(...);
    client.Connect();

    var q = client.Cypher.DOQUERYHERE
    return q.Results.Single();
}

每次他们调用Get他们创建一个新实例,这样做的开销会使代码效率低下。

所以,长期和短期是 - 如果你希望拥有多个实例 - 当然你可以,你拥有的场景是一个很好的理由。