نقل قول نوشته شده توسط javanerd مشاهده تاپیک
این یک مثال از کدی که پیدا کردن اشکالش کار حضرت فیله. البته شاید از هر هزار دفعه اجرا فقط یکبار ترد زودتر از سازنده‌ی کلاس فرزند اجرا بشه.


public class ThreadDemo {

public static void main(final String[] args) {
new ChildClass();
}
}

class MyThread extends Thread {

private final BaseClass workingClass;

public MyThread(final BaseClass aBaseClass) {
this.workingClass = aBaseClass;
}

@Override
public void run() {
System.out.println("This thread is workin on "
+ this.workingClass.getDescription());

}

}

class BaseClass {

public BaseClass() {
final MyThread myThread = new MyThread(this);
myThread.start();
}

protected String getDescription() {
return "This is the base class";
}

}

class ChildClass extends BaseClass {

private final String description;

public ChildClass() {
this.description = "This is the ";
}

@Override
protected String getDescription() {
return this.description;

}
}
دوست عزیز
اولاً برنامه ای با این همه پیچیدگی کلاس ها، به نظر شما مشکلی در طراحی کلاس هایش ندارد؟ وقتی چند کلاس به این شکل به هم وابسته می شوند، جایی در طراحی کلاس ها دچار مشکل هستید.
دوماً باز هم این وظیفه شما به عنوان برنامه نویس است که کنترل روند اجرای برنامه را درست ایجاد کنید؟!
سوماً در این برنامه مشکل که واضح است. چون سازنده کلاس والد قبل از سازنده کلاس فرزند اجرا می شود، پس قطعاً دستور Start قبل از سازنده کلاس فرزند اجرا می شود اما اینکه چرا در بعضی مواقع درست کار می کند دلیلش مربوط می شود به برهه زمانی و تعویض ترد ها در CPU . و تنها دلیل این موضوع همین است و اجرای ترد (دستور start) همواره قبل از اجرای دستورات تابع سازنده کلاس فرزند اجرا می شود، نه هر هزار دفعه یک دفعه!