抽象类作为不同线程上的共享内存

时间:2014-09-15 11:38:38

标签: java multithreading

我有一个抽象类,它由在不同线程上运行的类继承。这个抽象类中的变量是否充当共享内存?

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是预期的行为吗?如果是的话我怎样才能使它具有特定的线程而不会覆盖?

1 个答案:

答案 0 :(得分:0)

未共享x变量。它在任何调用bar()方法的线程上复制。如果其内容始终相同,则应将其声明为static final成员变量。那就是:

public abstract class A
{
 static final  List<String> x=new ArrayList();

通过静态初始化程序初始化它也可能是个好主意:Static initializer in Java