我的大学java教材是《java2简明教程》(第二版),书上9.6思考和练习题目第3题题目:创建一个Thread类的子类,并覆盖run()方法,要求:
(1)在构造函数中输出一条线程已启动的信息。
(2)在run()方法内,输出一条信息,以表明执行了run()方法,
     然后调用sleep(),将这两条语句重复6次,然后从run()返回。
(3)覆盖finalize()方法,输出一条线程结束的信息。
前面两个要求很好实现,但是第三个想了好一会还是没想到,网上也查了一下,方法也不行,
所以把题目贴上来,请教大家一起解决,谢谢~~~~

解决方案 »

  1.   

    class test{
      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.");
       }
    }
      

  2.   

    不觉得这个问题有问题吗?
    第一和第三问明显的问题。
    第一问:构造函数属于对象的方法和线程启动一点关系没有
    第三问:finalize属于对象销毁时执行的,属于jvm调度执行,和线程结束一点关系都没有
    现在的课本难道都不需要审核下就来误人子弟了吗
      

  3.   

    整个程序(进程)都退出了,当然没有必要单独释放对象资源了。你在main函数后面加上System.gc();Thread.sleep(足够长时间);看看是否可行。public static void main(String[] srgs)

        try{
        Thread t = new MyThread();
        t.start();
        t.join();
        t = null;
        System.gc();
        Thread.sleep(足够长时间);
        }catch(Exception ex)
    {
    ex.printStackTrace();
    }