当前位置:嗨网首页>书籍在线阅读

41-结果分析

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

结果分析

下图展示了执行该应用的输出结果。

60.png 一方面,由于对同一个数值执行了加法和减法操作,因此预期的结果应该是0。能获得amount字段的结果是因为使用 VarHandle 来访问它,我们要保证原子性地修改它。另一方面, unsafeAmount 并没有获取预期的值。没有保护访问该值的行为,在这里会有一个数据竞争条件。

为了使用一个变量句柄,首先我们必须用 MethodHandleslookup() 方法来获取它,然后是 in() 方法和 findVarHandle() 方法。 lookup() 方法返回一个 Lookup 对象,而 in() 方法返回了一个特定类的 Lookup 对象,然后使用 Account 类和 findVarHandle() 方法生成 VarHandle 对象,从而可以访问我们想要的字段。

一旦有了 VarHandle 对象,就可以利用不同的方法来使用不同的访问模式。在本案例中,我们使用了 getAndAdd() 方法。该方法保证了原子性访问来对该字段的值执行加法操作。我们可以传递这些对象来访问和增加它们的值。

后面会提供更多关于每一个案例中的各种访问模式和方法的信息。