我有一个抽象类,它由在不同线程上运行的类继承。这个抽象类中的变量是否充当共享内存?
public abstract class A
{
public abstract void foo();
public boolean bar(){
{
List<String> x=new ArrayList();
x.add("a");
//some code
}
}
public class B extends A
{
@Override
public void foo()
{
//some code
}
}
public class C extends A
{
@Override
public void foo()
{
//some code
}
@Override
public boolean bar()
{
List<String> x=new ArrayList();
x.add("a");
//some code
}
}
public class D extends A
{
@Override
public void foo()
{
//some code
}
}
类B,C和D在不同的线程中运行。然而,x的行为类似于A和B的共享内存,D是预期的行为吗?如果是的话我怎样才能使它具有特定的线程而不会覆盖?
答案 0 :(得分:0)
未共享x
变量。它在任何调用bar()
方法的线程上复制。如果其内容始终相同,则应将其声明为static final
成员变量。那就是:
public abstract class A
{
static final List<String> x=new ArrayList();
通过静态初始化程序初始化它也可能是个好主意:Static initializer in Java