Предположим, что у меня есть абстрактный базовый класс, реализующий интерфейс 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 запустить поток, вызывающий абстрактный метод в конструкторе? Потому что, в С++ и С#, это небезопасно в большинстве случаев, насколько я знаю. Спасибо!