我有一个非抽象方法的抽象类。我想知道默认情况下这些非抽象方法是否是线程安全的?
为了使问题更清楚,这是一个例子
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()方法设为同步?
答案 0 :(得分:1)
抽象类方法在并发访问方面没有任何特殊之处。如果您正在使用非抽象方法中的静态资源,那么您应该使其同步以避免任何并发访问问题。
答案 1 :(得分:0)
如果A类扩展了B类,那么B类的所有对象都可以使用A中的公共和非抽象方法。显然,你可以在B中覆盖这些函数,但是如果你不这样做,那么就会使用A中的(公共,非抽象)函数没有问题。
放在方法前面的字摘要意味着你必须在子类中覆盖它。
答案 2 :(得分:0)
嗯,完全没有问题,因为狗和猫是独立的对象 - >没有同步问题...
答案 3 :(得分:0)
“编写线程安全代码的核心是管理对状态的访问,特别是对共享的可变状态的访问。” - 实践中的Java并发 -
foo状态非常重要。