A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 请叫我马里奥 中级黑马   /  2013-10-6 11:37  /  1397 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Test extends Thread
{
        private String name;
        Test(String name)
        {
             this.name=name;
        }
         public void run()
         {
               for(int i=0;i<60;i++)
              {
                   System.out.println(name+"run"+i);
              }
         }
}
abstract class GetTime
{
         public final void getTime()
         {
                  long start=System.currentTimeMillis();
                  runcode();
                  long end=System.currentTimeMillis();
                  System.out.println("shijian....."+(end-start));
         }
         public abstract void runcode();
}
class SubTime extends GetTime
{
         public void runcode()
         {
                 Test t1=new Test("test1");
                 Test t2=new Test("test2");
                  t1.start();
                  t2.start();
          }
}
public class demo1 {
             public static void main(String[] args)
             {
                     SubTime gt=new SubTime();
                    gt.getTime();
              }
}
我想计算一下t1.start和t2.start的运行时间,应该把System.out.println("shijian....."+(end-start));放在什么地方才对呢?

评分

参与人数 1技术分 +1 收起 理由
黄文伯 + 1 亲,请及时将&quot;未解决&quot;修改为&quot;已解决&quot;呀

查看全部评分

3 个回复

正序浏览
  1. /*
  2. 楼主想要获得t1和t2线程运行的时间,但是你的代码出现的问题是因为主线程瞬间执行了你的
  3. 打印时间语句;
  4. 所以,你的程序中一共有三个线程:主线程+t1线程+t2线程。那么要获得t1和t2的运行时间,
  5. 就要到它执行完run(){}方法之后,所以,我在下面做了注释,帮楼主将打印时间语句放在了for()之后,
  6. 在本程序中,只有等t1,t2线程执行完循环后线程才能获得线程运行时间,代码如下:
  7. */
  8. class Test extends Thread
  9. {
  10.                 static int i;
  11.         private String name;
  12.         Test(String name)
  13.         {
  14.              this.name=name;
  15.         }
  16.          public  void run()
  17.          {
  18.                         long start=System.currentTimeMillis();
  19.                for( i=0;i<600;i++)
  20.               {
  21.                    System.out.println(name+"run"+i);
  22.               }
  23.                          long end=System.currentTimeMillis();
  24.                          //将时间获取定义在下面,也就是等到t1和t2线程执行完成后再打印时间:
  25.                          System.out.println(Thread.currentThread().getName()+"shijian....."+(end-start));//
  26.          }
  27. }
  28. abstract class GetTime
  29. {                       
  30.          public final  void getTime()
  31.          {
  32.                   
  33.                    runcode();
  34.                   
  35.                   
  36.          }
  37.          public abstract void runcode();
  38. }
  39. class SubTime extends GetTime
  40. {
  41.          public  void runcode()
  42.          {
  43.                  Test t1=new Test("test1");
  44.                  Test t2=new Test("test2");
  45.                                   t1.start();
  46.                   t2.start();
  47.                                  
  48.                                  
  49.           }
  50. }
  51. class demo1 {
  52.              public static void main(String[] args)
  53.              {
  54.                     SubTime gt=new SubTime();
  55.                     gt.getTime();
  56.               }
  57. }
复制代码
回复 使用道具 举报
线程运行代码里面最后一行代码。就是你for循环的外面。
回复 使用道具 举报
我的理解是放在t1.start 和t2.start下面
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马