我有课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
}
}
- 现在如果在某个时间点将一些对象添加到
Cache.someObjectList
它会反射(reflect)在 A 类中吗?我认为应该如此,因为 A 只包含对它的引用。 - 当
Cache.someObjectList
的内容出现时,A 的代码会不会有问题?改变?
编辑: 根据建议: 如果我做
void run (){
while(true){
synchronized(someObjList){
}
try{
Thread.sleep(INTERVAL);
}catch(Exception e){
}
}
}
这能解决问题吗?
最佳答案
是的,这些更改也将反射(reflect)在
A
类中。正如您所说:A
持有与Cache
完全相同的对象的引用。是的,如果
A
不希望它发生变化,可能会导致问题。如果List
实现不是线程安全的(大多数通用实现不是线程安全的!),它也可能会导致问题。同时从两个线程访问非线程安全的数据结构可能会导致非常严重的问题。
关于java - 使用变量引用指向其他类的静态成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6913880/