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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

你们看我的代码,在第二个模块中,JAVA并没有运行,这个为什么?不能自己构造一个方法,一定要用run方法?


class ThreadDemo2
{
        public static void main(String[] args)
        {
                new TestThread().start();
                while (true)
                {
                                try{Thread.sleep(15);}catch(Exception e){}
                        System.out.println("main thread is running");
                }
        }
}
class TestThread extends Thread
{
        public void show() //这里改成run就 OK了。
        {
                while(true)
                {
                                try{Thread.sleep(15);}catch(Exception e){}
                        System.out.println(Thread.currentThread().getName()+"is running");
                }
        }
}

4 个回复

倒序浏览
本帖最后由 adison 于 2012-4-6 19:09 编辑
  1. class ThreadDemo2
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 new TestThread().start();
  6.                /* while (true)
  7.                 {
  8.                                 try{Thread.sleep(15);}catch(Exception e){}
  9.                         System.out.println("main thread is running");
  10.                 }*///这段代码跟start方法和run方法都没关系(不知你这段代码有啥意思,先说明一下)
  11.           new TestThread().show ();//调用show()方法
  12.       }
  13. }
  14. class TestThread extends Thread
  15. {
  16.         public void show() //可以构造一个方法,属于子类方法,必须要用子类对象调用
  17.         {
  18.                 while(true)
  19.                 {
  20.                                 try{Thread.sleep(15);}catch(Exception e){}
  21.                         System.out.println(Thread.currentThread().getName()+"is running");
  22.                 }
  23.               }
  24.        public void run()
  25.         {
  26.                 while(true)
  27.                 {
  28.                                 try{Thread.sleep(15);}catch(Exception e){}
  29.                         System.out.println(Thread.currentThread().getName()+"is running");
  30.                 }
  31.         }//run方法必须要有,多线程中start方法用来启动线程,如果该线程获得了调度而运行,那么run方法主要就是用来定义线程在运行时要干的事,至于为什么要这样,java底层已经帮我们封装做好了,我们没必要知道,就当做一个规则用就行了。
  32. }
复制代码
回复 使用道具 举报
run()方法是Thread类的方法,Thread类的源码是用start()方法去调run()方法的,所以一个类继承Thread类那么这个类之所以能启动一个新的线程,是因为start()方法调用了run()方法,
所以子类必须覆盖父类的run()方法,线程才能被启动 。
回复 使用道具 举报
new Thread() 或者其子类,能创建一个线程 这个线程要开启 需要调用父类Thead的start()方法
而start()方法就是让虚拟机去调用该线程的run()方法来执行的 这些都是在底层实现的
给你用就是约定成俗的规矩。。

还有你创建了show()方法,要怎么去被线程所执行?   因为规定了线程要去执行run()所以在run()里面调用一下show()就行了,很简单吧
非要让start()去调用虚拟机去执行show() 你只能去底层,修改Thread之类的了,不仅麻烦 也没可移植性了
回复 使用道具 举报
我靠!(此回复虽然仅有兩个字,却深刻地表达了回复人的深深情感,可谓言简意赅,一字千金,字字扣人心弦!再加上以感叹号收尾,画龙点睛之效,境上添花直美,妙笔生花,意境深远!)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马