我的大学java教材是《java2简明教程》(第二版),书上9.6思考和练习题目第3题题目:创建一个Thread类的子类,并覆盖run()方法,要求:
(1)在构造函数中输出一条线程已启动的信息。
(2)在run()方法内,输出一条信息,以表明执行了run()方法,
然后调用sleep(),将这两条语句重复6次,然后从run()返回。
(3)覆盖finalize()方法,输出一条线程结束的信息。
前面两个要求很好实现,但是第三个想了好一会还是没想到,网上也查了一下,方法也不行,
所以把题目贴上来,请教大家一起解决,谢谢~~~~
(1)在构造函数中输出一条线程已启动的信息。
(2)在run()方法内,输出一条信息,以表明执行了run()方法,
然后调用sleep(),将这两条语句重复6次,然后从run()返回。
(3)覆盖finalize()方法,输出一条线程结束的信息。
前面两个要求很好实现,但是第三个想了好一会还是没想到,网上也查了一下,方法也不行,
所以把题目贴上来,请教大家一起解决,谢谢~~~~
public static void main(String[] srgs){
new MyThread().start();
}
}class MyThread extends Thread{
MyThread(){
System.out.println("MyThread object has been created.");
}
public void run(){
System.out.println("Thread started.");
for(int i = 0;i < 6; i++){
try{
System.out.println("running.");
Thread.sleep(1000);
}catch(Exception e){}
}
} protected void finalize() throws Throwable {
System.out.println("MyThread object has been finalized.");
}
}
第一和第三问明显的问题。
第一问:构造函数属于对象的方法和线程启动一点关系没有
第三问:finalize属于对象销毁时执行的,属于jvm调度执行,和线程结束一点关系都没有
现在的课本难道都不需要审核下就来误人子弟了吗
{
try{
Thread t = new MyThread();
t.start();
t.join();
t = null;
System.gc();
Thread.sleep(足够长时间);
}catch(Exception ex)
{
ex.printStackTrace();
}
}