- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
public class a {
private static TitanGraph titanGraph = null;
static GraphTraversalSource traversalSource = null;
public static void main(String a[])
{
titanGraph = TitanFunctions.getTitanGraph();
traversalSource = titanGraph.traversal();
// Task to be executed by each thread
Runnable r = new Runnable() {
public void run() {
long ab = traversalSource.V().has("RequestJob", "RequestId", 203)
.has("JobLockStatus","F")
.property("JobLockStatus", "B").count().next();
titanGraph.tx().commit();
System.out.println("value: "+ab+" : " +Thread.currentThread().getName());
}
};
Thread t1 = new Thread(r, "T1");
Thread t2 = new Thread(r, "T2");
t1.start();
t2.start();
}}
在上面的程序中,两个并发线程正在尝试将同一个 RequestId=203 的值从 “F” 更新为 “B”
。
似乎两个线程都将状态值获取为 “F” 并将其更新为 B。但我希望只有一个线程应该将值从“F”更改为“B”。更新值后,我还使用 commit() 来保存更改。
如果任何线程将状态从“(F)ree”更改为“(B)usy”..其他线程应该看到更改后的值..(“B”)。
请帮我解决这个问题。
最佳答案
您可以使用互斥体或 synchronized()
block 来确保在任何给定时间只有一个线程可以执行该操作。像下面这样的东西可能会起作用:
titanGraph = TitanFunctions.getTitanGraph();
traversalSource = titanGraph.traversal();
Runnable r = new Runnable() {
public void run() {
synchronized(titanGraph){
long ab = traversalSource.V().has("RequestJob", "RequestId", 203)
.has("JobLockStatus","F")
.property("JobLockStatus", "B").count().next();
titanGraph.tx().commit();
}
}
};
Thread t1 = new Thread(r, "T1");
Thread t2 = new Thread(r, "T2");
t1.start();
t2.start();
因此,上面的 block synchronized(titanGraph)
基本上是在说明,对于该 block 内的任何内容,它只能由对括号内的对象具有锁定的线程执行。在本例中为titanGraph
。如果线程没有锁,那么它会等待锁变得可用。
Here是一个关于使用synchronized
关于java - titan 图数据库中并发更新的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42971443/
执行以下遍历时: graph.addVertex("a") graph.addVertex("b") graph.addVertex("c") graph.traversal().V().range(
例如,我想在查询时排除一些顶点 ID。 第 1 步:我正在带领用户跟随我 (1234): g.V(1234).outE("following") 输出: 9876,3246,2343,3452,123
我写了一个 JUnit 测试来检查 generate-modern.groovy如果 marko 存在,则绘制图表。 我的小鬼查询是 "g.V().has('name','marko')"; 正如您在
在我的系统中,我要求节点上的边数必须存储为顶点上的内部属性以及特定输出边上的以顶点为中心的索引。这自然需要我在所有数据加载完成后计算节点上的边数。我这样做如下: long edgeCount = gr
目标 我有一个足够简单的任务需要完成:设置特定边属性的权重。以这个场景为例: 我想做的是更新 weight 的值. 附加要求 如果边不存在,则应创建它。 两个节点之间最多只能存在一条相同类型的边(即,
一个非常基本的问题 我刚刚将Titan从0.54升级到Titan 1.0 Hadoop 1/TP3版本3.01。 我在删除的值时遇到问题 Property key: Cardinality.LIST/
我是泰坦的新手。 我正在使用ubuntu 12.04并使用从deb软件包安装的cassandra 2.0和ES 1.0。 我试图让ES与titan一起工作。 gremlin> g = TitanF
我正在关注 http://s3.thinkaurelius.com/docs/titan/1.0.0/getting-started.html我的 Windows 机器上的指南。 但我在第一步就陷入困
我对 Titan/Gremlin/TinkerPop3 非常陌生,正在尝试使用 Restful API 接口(interface)来创建/修改/删除数据库中的顶点/边。 我主要想看看是否可以使用tin
我正在使用以下Rexster查询: string gremlinQuery = "g.v(" + companyVertexId + ").transform{[salaryInfo:it.outE
我正在使用 Titan-1.0.0,我想将其迁移到 janusgraph-0.1.1。我需要做哪些配置更改?我还想使用 JanusGraph 重用 Titan 的数据。 最佳答案 从 Titan 迁移
我想删除两个顶点之间的边,所以我在 java tinkerpop3 中的代码如下 private void removeEdgeOfTwoVertices(Vertex fromV, Vertex t
我正在尝试掌握 Gremlin。彻底阅读文档后,我似乎仍然在概念上苦苦挣扎。 我正在创建一个基本的新闻源,遵循此处 Neo4j 文档中的模型: http://neo4j.com/docs/snapsh
我在 Spring Web 应用程序中使用 Titan。当我添加新边或删除一个顶点时,它实际上已删除但未反射(reflect)在我的网页中。我的查询仍然得到旧的边或顶点。 为此,我必须重新启动我的应用
我一直试图在 Gremlin 查询中找出这个 if-else。假设 g.V({0}) 是下面的群顶点。 var q = "g.V({0}).as('groupName', 'groupId',
我有一个带有几个索引的图表。它们是两个带有标签限制的复合指数。 (两者在不同的属性/标签上完全相同)。 一个似乎确实有效,但另一个无效。我已经完成了以下 profile() 以进行双重检查: 一个叫K
背景:我正在尝试使用 this approach 实现一个时间序列版本数据库,使用 gremlin (tinkerpop v3)。 我想获取给定身份节点(蓝色)的最新状态节点(红色)(由包含时间戳范围
很明显,在两个顶点之间找到边的简单方法是: graph.traversal().V(outVertex).bothE(edgeLabel).filter(__.otherV().is(inVertex
我目前正在阅读TinkerPop3 Documentation 我感到困惑的是,我找不到关于next()的任何解释。 例如,w/next()或w/o next()返回相同的文字 gremlin> g.
在DataStax收购Aurelius之后,自从Titan 1.0.0在2015年9月发布以来,自那时以来几乎没有提交过,所以我想知道在生产中使用TitanDB是否安全。谁能给我一些见识? 最佳答案
我是一名优秀的程序员,十分优秀!