是否可以在Java中从构造函数调用抽象方法?
2022-09-01 17:12:17
假设我有一个实现 Runnable 接口的抽象基类。
public abstract class Base implements Runnable {
protected int param;
public Base(final int param) {
System.out.println("Base constructor");
this.param = param;
// I'm using this param here
new Thread(this).start();
System.out.println("Derivative thread created with param " + param);
}
@Override
abstract public void run();
}
这是为数不多的衍生类之一。
public class Derivative extends Base {
public Derivative(final int param) {
super(param);
}
@Override
public void run() {
System.out.println("Derivative is running with param " + param);
}
public static void main(String[] args) {
Derivative thread = new Derivative(1);
}
}
关键是我希望我的基类做一些常规的事情,而不是每次都复制它。实际上,它运行良好,输出始终相同:
使用参数 1 创建的基构造函数导数线程 正在使用参数 1 运行
但是,在JAVA中启动一个在构造函数中调用抽象方法的线程是否安全?因为,据我所知,在C++和C#中,在大多数情况下它是不安全的。谢谢!