抽象类线程安全的非抽象方法

时间:2013-05-10 15:04:51

标签: java synchronization abstract

我有一个非抽象方法的抽象类。我想知道默认情况下这些非抽象方法是否是线程安全的?

为了使问题更清楚,这是一个例子

public abstract Class Animal {
  private List foo;
  non abstract method survive() {
    //bla bla bla
    foo++;
    foo = foo * 2
    foo = nul
    //bla bla bla
  }  
  abstract method eat();
  abstract method sleep();
}

public class Cat extends Animal {
  eat();
  sleep();
}

public class Dog extends Animal {
  eat();
  sleep();
}

//etc etc

如果Cat和Dog想要同时存活,Java默认会处理它吗?或者我应该将Animal.survive()方法设为同步?

4 个答案:

答案 0 :(得分:1)

抽象类方法在并发访问方面没有任何特殊之处。如果您正在使用非抽象方法中的静态资源,那么您应该使其同步以避免任何并发访问问题。

答案 1 :(得分:0)

如果A类扩展了B类,那么B类的所有对象都可以使用A中的公共和非抽象方法。显然,你可以在B中覆盖这些函数,但是如果你不这样做,那么就会使用A中的(公共,非抽象)函数没有问题。

放在方法前面的字摘要意味着你必须在子类中覆盖它。

答案 2 :(得分:0)

嗯,完全没有问题,因为狗和猫是独立的对象 - >没有同步问题...

答案 3 :(得分:0)

  

“编写线程安全代码的核心是管理对状态的访问,特别是对共享的可变状态的访问。” - 实践中的Java并发 -

foo状态非常重要。