java - 使用变量引用指向其他类的静态成员

标签 java reference

我有课Cache拾取 List<SomeObject> someObjectList从数据库并将其存储在静态变量中。

现在我有另一个线程 A,它使用这个列表,如下

class A extends Thread{
  private List<SomeObject> somobjLst;

  public A(){
    somobjLst = Cache.getSomeObjectList();
  }

 void run(){
  //somobjLst used  in a loop here, no additong are done it , but its value is used
 }
}
  1. 现在如果在某个时间点将一些对象添加到 Cache.someObjectList它会反射(reflect)在 A 类中吗?我认为应该如此,因为 A 只包含对它的引用。
  2. Cache.someObjectList 的内容出现时,A 的代码会不会有问题?改变?

编辑: 根据建议: 如果我做

  void run (){
  while(true){
     synchronized(someObjList){


    }
     try{
     Thread.sleep(INTERVAL);
     }catch(Exception e){
     }
  }
 }


这能解决问题吗?

最佳答案

  1. 是的,这些更改也将反射(reflect)在 A 类中。正如您所说:A 持有与 Cache 完全相同的对象的引用

  2. 是的,如果A不希望它发生变化,可能会导致问题。如果List实现不是线程安全的(大多数通用实现不是线程安全的!),它可能会导致问题。同时从两个线程访问非线程安全的数据结构可能会导致非常严重的问题。

关于java - 使用变量引用指向其他类的静态成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6913880/

相关文章:

java - 匹配器断言两个对象

java - 将一个字符串与多个字符串进行比较(最佳数据结构)

java - 我想在 Java 中用点而不是逗号输入 double 值,但出现异常

c++ - 如何在C++中使用字符串和字符串指针

c - 实际在 C 中定义的函数的 undefined reference 错误

Java 递归,用对象调用它 - 如何复制对象?

java - 找出奇偶数和零

java - 检查 samba 安装权限时 Java 是否完全兼容?

perl - 对相等字符串的引用

javascript - 原型(prototype)中的数组和对象 - 不被视为引用