初始化我想跨多个线程共享的静态对象的最佳方法是什么

丁丁

编辑:在此处添加更多上下文和代码:

目前这是我所拥有的:

public class MyClass{

   private static MyClass2 mySharedObject = null; //this is the object that I want to share across m

   private SomeRandomClass someRandomClass; 

   public MyClass(MyClass3 object3, MyClass4 object4, SomeRandomClass someRandomClass){


 /* it just so happens that it is guaranteed that someRandomClass, no 
    matter which thread creates it, will have the same value.  But the value is not known in design time and hence I can't move this initialize code to the static {} block, as suggested by many folks.  One thing that I can do is move the creation of this sharedObject outside MyClass and do it before any threads actually use it.  Unfortunately, I am dealing with a legacy code here and didn't want to do that change and that's why asked if the approach I presented is good enough or there is something better? */  


        this.someRandomClass = someRandomClass;

        synchronized(mySharedObject){

              if(mySharedObject ! =null){
                 mySharedObject = new MyClass2(someRandomClass);//It doesn't matter which thread wins to create this object. I just need a valid instance of someRandomClass to create mySharedObject.  Once it is created, I can use it for all the threads.
               }

        }

   }

}

有没有更好的办法?PS:我不想在 MyClass 的构造函数中传递这个共享对象和/或我不想让 MyClass2 作为单例。

谢谢

Abion47

使用静态初始化块。

public class MyClass {
    private static MyClass2 mySharedObject;

    static {
        mySharedObject = null; // whatever value here
    }

    // The rest of MyClass
}

编辑:根据您的评论,另一种方法是mySharedObject在开始您尝试的任何并发过程之前外部设置值

/* MyClass.java */

public class MyClass {
    private static MyClass2 mySharedObject = null;

    public static SetSharedObject(MyClass2 sharedObject) {
        mySharedObject = sharedObject;
    }

    // The rest of the class
}

/* Elsewhere.java */

MyClass2 sharedObject = new MyClass2(someRandomClass);
MyClass.SetSharedObject(sharedObject);    

// Do whatever you do with MyClass concurrency

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

处理影响跨不同线程共享的对象的定时回调的最佳方法是什么?

来自分类Python

跨Python类初始化和使用常量的最佳方法是什么?

来自分类Dev

测试类静态初始化程序的最佳方法是什么?

来自分类Dev

使用 `thread_local!` 和 `OnceCell` 在多个线程之间共享包含 `Rc` refs 的静态延迟初始化对象

来自分类Dev

初始化对象时传递方法的最佳方法是什么

来自分类Dev

在多个对象之间共享对象实例的最佳方法是什么?

来自分类Python

在Python中初始化dict的最佳方法是什么?

来自分类Dev

推迟类属性初始化的最佳方法是什么?

来自分类Java

初始化Quartz的最佳方法是什么?

来自分类Java

初始化bean的最佳方法是什么?

来自分类Dev

进行昂贵的初始化的最佳方法是什么?

来自分类Dev

在TensorFlow中初始化变量的最佳方法是什么?

来自分类Dev

初始化数组“ memset”或“ {// value}”的最佳方法是什么?

来自分类Dev

初始化我的数字变量的正确方法是什么?

来自分类Dev

用Ecmascript 6中省略值的默认值初始化对象的最佳方法是什么?

来自分类Java

初始化Gson对象的最佳方法

来自分类Dev

我可以在类外部初始化数组实例变量吗?以下代码的最佳OOP方法是什么?

来自分类Dev

使用静态或全局对象初始化共享指针

来自分类Dev

指向对象初始化线程安全的静态指针

来自分类Dev

c ++对象中静态变量的默认初始化值是什么?

来自分类Java

在Google集合中静态初始化地图的最佳方法

来自分类Dev

跨系统的静态成员初始化

来自分类Dev

静态初始化的对立面是什么?

来自分类Dev

线程安全Singletion静态方法初始化

来自分类Dev

在C ++(98、11和14)中初始化静态数据成员的正确方法是什么?

来自分类Dev

在Ada中初始化固定长度字符串的最佳方法是什么?

来自分类Java

在班级中初始化记录器的最佳方法是什么?

来自分类Java

使用Arrays.asList()初始化列表的最佳方法是什么

来自分类Dev

在类中初始化以下实例的最佳方法是什么?

Related 相关文章

  1. 1

    处理影响跨不同线程共享的对象的定时回调的最佳方法是什么?

  2. 2

    跨Python类初始化和使用常量的最佳方法是什么?

  3. 3

    测试类静态初始化程序的最佳方法是什么?

  4. 4

    使用 `thread_local!` 和 `OnceCell` 在多个线程之间共享包含 `Rc` refs 的静态延迟初始化对象

  5. 5

    初始化对象时传递方法的最佳方法是什么

  6. 6

    在多个对象之间共享对象实例的最佳方法是什么?

  7. 7

    在Python中初始化dict的最佳方法是什么?

  8. 8

    推迟类属性初始化的最佳方法是什么?

  9. 9

    初始化Quartz的最佳方法是什么?

  10. 10

    初始化bean的最佳方法是什么?

  11. 11

    进行昂贵的初始化的最佳方法是什么?

  12. 12

    在TensorFlow中初始化变量的最佳方法是什么?

  13. 13

    初始化数组“ memset”或“ {// value}”的最佳方法是什么?

  14. 14

    初始化我的数字变量的正确方法是什么?

  15. 15

    用Ecmascript 6中省略值的默认值初始化对象的最佳方法是什么?

  16. 16

    初始化Gson对象的最佳方法

  17. 17

    我可以在类外部初始化数组实例变量吗?以下代码的最佳OOP方法是什么?

  18. 18

    使用静态或全局对象初始化共享指针

  19. 19

    指向对象初始化线程安全的静态指针

  20. 20

    c ++对象中静态变量的默认初始化值是什么?

  21. 21

    在Google集合中静态初始化地图的最佳方法

  22. 22

    跨系统的静态成员初始化

  23. 23

    静态初始化的对立面是什么?

  24. 24

    线程安全Singletion静态方法初始化

  25. 25

    在C ++(98、11和14)中初始化静态数据成员的正确方法是什么?

  26. 26

    在Ada中初始化固定长度字符串的最佳方法是什么?

  27. 27

    在班级中初始化记录器的最佳方法是什么?

  28. 28

    使用Arrays.asList()初始化列表的最佳方法是什么

  29. 29

    在类中初始化以下实例的最佳方法是什么?

热门标签

归档