gpt4 book ai didi

java - 使用 deuce stm 的交易

转载 作者:行者123 更新时间:2023-11-29 06:16:47 28 4
gpt4 key购买 nike

我正在尝试恢复异常时的对象状态。我的代码是这样的::

public class DeuceTXTest
{
@Atomic
public void myTransactionMethod(HashMap<String, String> myHashMap)
{
myHashMap.put("s2", "two");
if(8>5)
throw new NullPointerException();
}

public static void main(String[] args){
HashMap<String, String> hashMap = new HashMap<String, String>();
hashMap.put("s1", "one");
System.out.println("Prior TX :: "+hashMap);
DeuceTXTest txTest = new DeuceTXTest();
try {
txTest.myTransactionMethod(hashMap);
} catch (Exception e) {
System.out.println(e);
}
System.out.println("Post TX :: "+hashMap);
}
}

我在 eclipse 上运行时添加了 -javaagent:myDir/deuceAgent.jar 作为 VMArgument。

预期结果::

Prior TX :: {s1=one}
java.lang.RuntimeException
Post TX :: {s1=one}

实际结果::

Prior TX :: {s1=one}
java.lang.RuntimeException
Post TX :: {s2=two, s1=one}.

此外,请建议我更好的示例,以在事务回滚或抛出异常时恢复/恢复对象状态。

最佳答案

Deuce 语义是在用户异常时提交,与单个全局锁相同。这是这样做的,因为 Java 中的异常是合法的流控制。

如果您想回滚事务,您可以抛出 TransactionException 或 AbrotTransactionException。

顺便说一句,由于您在事务中使用的类是 rt.jar 的一部分(并加载到 bootclasspath 中),因此您应该离线检测 rt.jar 或至少将此类添加到引导类加载器。

参见:http://www.deucestm.org/documentation/getting-started

关于java - 使用 deuce stm 的交易,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4815911/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com