如何在不使用类级别锁的情况下同步两个静态方法

马纳夫

如何使getFoo()和getBar()成为线程安全的?这样一来,一个线程可以调用getFoo()而另一个可以调用getBar()...即我不想在类级别锁上进行同步。

private static Foo foo; 
private static Bar bar;     


private static void initBar() {
    bar = SomeOtherClass.getBarVal();
}

private static void initFoo() {
    foo = SomeOtherClass.getFooVal();
}

public static Foo getFoo() {
    if (foo == null) {
        initFoo();
    }
    return foo;
}

public static Bar getBar() {
    if (bar == null) {
        initBar();
    }
    return bar;
}
穆雷尼克

您不需要锁定getFoo()getBar(),仅需要init块:

private static volatile Foo foo; 
private static volatile Bar bar;     
private static final Object fooLock = new Object();
private static final Object barLock = new Object();

private static void initBar() {
    bar = SomeOtherClass.getBarVal();
}

private static void initFoo() {
    foo = SomeOtherClass.getFooVal();
}

public static Foo getFoo() {
    if (foo == null) {
        synchronized (fooLock) {
            if (foo == null) {
                initFoo();
            }
        }
    }
    return foo;
}

public static Foo getBar() {
    if (bar == null) {
        synchronized (barLock) {
            if (bar == null) {
                initBar();
            }
        }
    }
    return foo;
}

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在不使用Java中的全局变量的情况下在两个类之间共享变量?

来自分类Dev

如何在不使用静态方法的情况下创建自定义Twig函数类?

来自分类Dev

如何在不使用串联的情况下串联两个numpy ndarrays

来自分类Dev

如何在不使用SVG的情况下使两个图像重叠

来自分类Dev

如何在不使用for循环的情况下向量化这两个numpy操作?

来自分类Dev

如何在不使用zip的情况下遍历两个列表?

来自分类Dev

如何在不使用循环目标c的情况下比较两个动态数组

来自分类Dev

如何在不使用临时变量的情况下交换两个变量的值?

来自分类Dev

如何在不使用复制的情况下在不同位置同步两个数据库?

来自分类Dev

如果已知访问顺序是安全的,如何在没有互斥锁的情况下同步线程/ CPU?

来自分类Dev

如果已知访问顺序是安全的,如何在没有互斥锁的情况下同步线程/ CPU?

来自分类Dev

在没有同步块(即低成本锁)的情况下,如何在一次安全操作中自动检查Java中的两个AtomicBooleans?

来自分类Dev

如何在不使用第三个变量的情况下交换两个Perl变量?

来自分类Dev

如何在不使用struct的情况下在一个函数中返回两个值?

来自分类Dev

如何在不使用不推荐使用的“ Salt”属性的情况下在单个页面中使用两个AntiForgeryToken

来自分类Dev

如何在不使用公共列的情况下使用SQL联接两个以上的表

来自分类Dev

如何在不使用Coredata的情况下使用swift在IOS的两个扩展之间共享变量值

来自分类Dev

在不使用类的情况下在Python中减去两个列表

来自分类Dev

如何在不使用列号的情况下对两个顺序标记的变量系列应用函数?

来自分类Dev

如何在不使用.babelrc文件的情况下将两个预设参数传递给babel?

来自分类Dev

如何在不使用distinct和union的情况下在两个表之间返回唯一记录?

来自分类Dev

如何在不使用boost或创建模板的情况下在c ++中同时对两个向量进行排序?

来自分类Dev

如何在不使用乘法运算符的情况下使两个正数相乘的递归函数

来自分类Dev

如何在不使用 zip/map 的情况下将两个列表合并为列表列表

来自分类Dev

如何在不使用 Underscore 或 Lodash 的情况下在 javascript 中组合两个对象数组?

来自分类Dev

如何在不使用服务和 rootscope 的情况下在两个控制器之间共享数据?

来自分类Dev

如何在不使用父组件的情况下直接在两个反应兄弟组件之间进行通信?

来自分类Dev

如何在不使用getter的情况下访问派生类的静态成员?

来自分类Dev

如何在不使用getter的情况下访问派生类的静态成员?

Related 相关文章

  1. 1

    如何在不使用Java中的全局变量的情况下在两个类之间共享变量?

  2. 2

    如何在不使用静态方法的情况下创建自定义Twig函数类?

  3. 3

    如何在不使用串联的情况下串联两个numpy ndarrays

  4. 4

    如何在不使用SVG的情况下使两个图像重叠

  5. 5

    如何在不使用for循环的情况下向量化这两个numpy操作?

  6. 6

    如何在不使用zip的情况下遍历两个列表?

  7. 7

    如何在不使用循环目标c的情况下比较两个动态数组

  8. 8

    如何在不使用临时变量的情况下交换两个变量的值?

  9. 9

    如何在不使用复制的情况下在不同位置同步两个数据库?

  10. 10

    如果已知访问顺序是安全的,如何在没有互斥锁的情况下同步线程/ CPU?

  11. 11

    如果已知访问顺序是安全的,如何在没有互斥锁的情况下同步线程/ CPU?

  12. 12

    在没有同步块(即低成本锁)的情况下,如何在一次安全操作中自动检查Java中的两个AtomicBooleans?

  13. 13

    如何在不使用第三个变量的情况下交换两个Perl变量?

  14. 14

    如何在不使用struct的情况下在一个函数中返回两个值?

  15. 15

    如何在不使用不推荐使用的“ Salt”属性的情况下在单个页面中使用两个AntiForgeryToken

  16. 16

    如何在不使用公共列的情况下使用SQL联接两个以上的表

  17. 17

    如何在不使用Coredata的情况下使用swift在IOS的两个扩展之间共享变量值

  18. 18

    在不使用类的情况下在Python中减去两个列表

  19. 19

    如何在不使用列号的情况下对两个顺序标记的变量系列应用函数?

  20. 20

    如何在不使用.babelrc文件的情况下将两个预设参数传递给babel?

  21. 21

    如何在不使用distinct和union的情况下在两个表之间返回唯一记录?

  22. 22

    如何在不使用boost或创建模板的情况下在c ++中同时对两个向量进行排序?

  23. 23

    如何在不使用乘法运算符的情况下使两个正数相乘的递归函数

  24. 24

    如何在不使用 zip/map 的情况下将两个列表合并为列表列表

  25. 25

    如何在不使用 Underscore 或 Lodash 的情况下在 javascript 中组合两个对象数组?

  26. 26

    如何在不使用服务和 rootscope 的情况下在两个控制器之间共享数据?

  27. 27

    如何在不使用父组件的情况下直接在两个反应兄弟组件之间进行通信?

  28. 28

    如何在不使用getter的情况下访问派生类的静态成员?

  29. 29

    如何在不使用getter的情况下访问派生类的静态成员?

热门标签

归档