有没有其他方法可以使用CAS操作在Java中编写同步块?

理查德·布拉德利

我有两个同步块,两个并发线程将大量访问这些块。我想减少争用和上下文切换。有没有办法在CAS上使用CAS(CompareAndSet)操作来实现AtomicBoolean

前任:

private final Object lock = new Object();

// Thread A executing this
public final void methodA() {
   synchronized(lock) {
       ...
   }
}

// Thread B executing this
public final void methodB() {
    synchronized(lock) {
       ...
    }
}

我不想使用java.util.concurrent.locks.Lock该类,因为我认为这不会有所作为。我想使用CAS。

亚述

您可以将同步块替换为:

private final AtomicBoolean flag = new AtomicBoolean();

while (!flag.compareAndSet(false, true));
try {
  //your code here
} finally {
  flag.set(false);
}

您应该在竞争情况下进行测试,以确保确实提高了性能。在小到中度竞争时,CAS效果最佳。

正如@yshavit所说,JIT可能已经为您执行了这种优化,因此再次测试很重要。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

除了内联块之外,还有没有其他方法可以使元素不换行?

来自分类Dev

有没有其他方法可以使用这些CSS样式,尤其是焦点

来自分类Dev

除了.each()函数以外,还有没有其他方法可以使用jQuery将输入字段中的信息收集到数组中?

来自分类Dev

除了.each()函数之外,还有没有其他方法可以使用jQuery将输入字段中的信息收集到数组中?

来自分类Dev

有没有其他方法可以删除jquery中的类?

来自分类Dev

除了<br />,还有没有其他方法可以打破html中的行?

来自分类Dev

有没有其他方法可以解决python中的Remove character?

来自分类Dev

有没有其他方法可以在 cshtml 中使用 Session 变量?

来自分类Dev

Apache Sqoop对Apache Hadoop真的必要吗?有没有其他方法可以使用数据库输入在hadoop中进行处理?

来自分类Dev

有没有一种方法可以使用API在Azure Devops中列出拉请求文件(来自源分支)及其位置?还有使用C#的其他方法吗?

来自分类Dev

Java在同步块中调用其他方法

来自分类Dev

有没有其他方法可以确保所有模块的NancyFx SSL?

来自分类Dev

除了使用访客模式之外,还有没有其他方法可以在C#中使用变体?

来自分类Dev

有没有其他方法可以在C ++中填充数组而无需向量

来自分类Dev

有没有其他方法可以在C ++中填充数组而无需向量

来自分类Dev

有没有其他方法可以在Python中管理n维数组/矩阵/列表的值分配?

来自分类Dev

shmat() 等是如何在 Linux 内核中实现的。有没有其他方法可以共享内存?

来自分类Dev

有没有其他方法可以在 VBA 中第二次出现 dateTime?

来自分类Dev

除了使用循环展开之外,还有没有其他方法可以优化向量矩阵乘法?

来自分类Dev

有没有其他方法可以隐藏AngularJS加载时显示的范围变量?

来自分类Dev

有没有其他方法可以更改for循环中的索引?

来自分类Dev

有没有其他方法可以避免Foreach循环?

来自分类Dev

有没有其他方法可以动态创建此双精度值数组?

来自分类Dev

有没有其他方法可以做到这一点?

来自分类Dev

有没有其他方法可以放置 MockMVC 的参数?

来自分类Dev

还有没有其他方法可以创建没有JSON的JavaScript关联数组?

来自分类Dev

如果可以通过任何其他方法访问该对象,那么对同步块中的对象进行锁定有什么用?

来自分类Dev

有没有一种方法可以使用groupby.sum并保留其他列?

来自分类Dev

有没有一种方法可以使SVG USE随后可修改(或使用其他技术)?

Related 相关文章

  1. 1

    除了内联块之外,还有没有其他方法可以使元素不换行?

  2. 2

    有没有其他方法可以使用这些CSS样式,尤其是焦点

  3. 3

    除了.each()函数以外,还有没有其他方法可以使用jQuery将输入字段中的信息收集到数组中?

  4. 4

    除了.each()函数之外,还有没有其他方法可以使用jQuery将输入字段中的信息收集到数组中?

  5. 5

    有没有其他方法可以删除jquery中的类?

  6. 6

    除了<br />,还有没有其他方法可以打破html中的行?

  7. 7

    有没有其他方法可以解决python中的Remove character?

  8. 8

    有没有其他方法可以在 cshtml 中使用 Session 变量?

  9. 9

    Apache Sqoop对Apache Hadoop真的必要吗?有没有其他方法可以使用数据库输入在hadoop中进行处理?

  10. 10

    有没有一种方法可以使用API在Azure Devops中列出拉请求文件(来自源分支)及其位置?还有使用C#的其他方法吗?

  11. 11

    Java在同步块中调用其他方法

  12. 12

    有没有其他方法可以确保所有模块的NancyFx SSL?

  13. 13

    除了使用访客模式之外,还有没有其他方法可以在C#中使用变体?

  14. 14

    有没有其他方法可以在C ++中填充数组而无需向量

  15. 15

    有没有其他方法可以在C ++中填充数组而无需向量

  16. 16

    有没有其他方法可以在Python中管理n维数组/矩阵/列表的值分配?

  17. 17

    shmat() 等是如何在 Linux 内核中实现的。有没有其他方法可以共享内存?

  18. 18

    有没有其他方法可以在 VBA 中第二次出现 dateTime?

  19. 19

    除了使用循环展开之外,还有没有其他方法可以优化向量矩阵乘法?

  20. 20

    有没有其他方法可以隐藏AngularJS加载时显示的范围变量?

  21. 21

    有没有其他方法可以更改for循环中的索引?

  22. 22

    有没有其他方法可以避免Foreach循环?

  23. 23

    有没有其他方法可以动态创建此双精度值数组?

  24. 24

    有没有其他方法可以做到这一点?

  25. 25

    有没有其他方法可以放置 MockMVC 的参数?

  26. 26

    还有没有其他方法可以创建没有JSON的JavaScript关联数组?

  27. 27

    如果可以通过任何其他方法访问该对象,那么对同步块中的对象进行锁定有什么用?

  28. 28

    有没有一种方法可以使用groupby.sum并保留其他列?

  29. 29

    有没有一种方法可以使SVG USE随后可修改(或使用其他技术)?

热门标签

归档