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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王金科 中级黑马   /  2012-8-20 18:27  /  1686 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王金科 于 2012-8-23 15:38 编辑

  1. 实现多线程的第一种方法,让一个类继承Thread类
  2. class A extends Thread
  3. {
  4.   覆盖run方法;
  5. }

  6. 实现多线程的第二种方法,让一个类实现Runnable接口
  7. class B implements Runnable
  8. {
  9.   实现run方法;
  10. }
  11. 以上两种方式的优劣,教学视频里是这么说的:
  12. 实现方式和继承方式有什么区别?

  13. 实现方式好处:避免的了单继承的局限性
  14. 在定义线程时,建议使用实现方式。

  15. 两种方式区别:
  16. 继承Thread:线程代码存放Thread子类的run方法中
  17. 实现Runnable:线程代码存在接口的子类的run方法中

  18. 那么我的问题是:
  19. 在函数内实现多线程:如下
  20. public class C
  21. {
  22.   public static void main()
  23.   {
  24.   Thread th = new Thread()
  25.   {
  26.   覆盖run方法;
  27.   };
  28.   
  29.   Runnable rb = new Runnable()
  30.   {
  31.   实现run方法;
  32.   };
  33.   
  34.   th.start();
  35.   new Thread(rb),start();
  36.   }
  37. }
  38. 我想问的是以上两个实现多线程的方法有什么区别和优劣?
复制代码

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

6 个回复

倒序浏览
首先你的代码有错误应该是这样的
        代码体现:

                        public class RunnableDemo implements Runnable
                        {
                                public void run()
                                {
                                        //code
                                }
                        }

                        public class RunnableDemoTest
                        {
                                public static void main(String[] args)
                                {
                                        RunnableDemo rd = new RunnableDemo();

                                        Thread t1 = new Thread(rd);
                                        Thread t2 = new Thread(rd);

                                        t1.start();
                                        t2.start();
                                }
                        }
两个实现多线程的方法有什么区别和优劣?
区别在于  一个是对象名调用方法名   一个是匿名对象调用方法名
优劣  就应该是 匿名对象调用方法比较节省内存空间
回复 使用道具 举报
方志亮 发表于 2012-8-20 18:48
首先你的代码有错误应该是这样的
        代码体现:
  1. 25.public class C

  2. 26.{

  3. 27.  public static void main()

  4. 28.  {

  5. 29.  Thread th = new Thread()

  6. 30.  {

  7. 31.  覆盖run方法;

  8. 32.  };

  9. 33.  

  10. 34.  Runnable rb = new Runnable()

  11. 35.  {

  12. 36.  实现run方法;

  13. 37.  };

  14. 38.  

  15. 39.  th.start();

  16. 40.  new Thread(rb),start();

  17. 41.  }

  18. 42.}
复制代码
哥们,看清楚我的问题,我要问的是这个函数两个实现多线程的方法有什么区别和优劣
回复 使用道具 举报
说说我的看法吧。比如说卖票吧,得用到多线程吧,又想继承一个"人"类。由于java是单继承 所以继承Thread 这种创建方法不合适。 处理同一数据时,继承Thread: static 生命周期太长,实现Runnable比较合适
回复 使用道具 举报
杨鹏鹏 发表于 2012-8-20 19:44
说说我的看法吧。比如说卖票吧,得用到多线程吧,又想继承一个"人"类。由于java是单继承 所以继承Thread  ...

你这个我知道的,那是单独创建类的情况
我想知道的是,不单独创建类,在一个函数内用匿名内部类的方式实现多线程,
那么两种方法有什么区别不?
回复 使用道具 举报
两个实现多线程的方法有什么区别和优劣?
区别在于  一个是对象名调用方法名   一个是匿名对象调用方法名
优劣  就应该是 匿名对象调用方法比较节省内存空间
回复 使用道具 举报
方志亮 发表于 2012-8-20 21:56
两个实现多线程的方法有什么区别和优劣?
区别在于  一个是对象名调用方法名   一个是匿名对象调用方法名
优 ...
  1. 那么我的问题是:

  2. 在函数内实现多线程:如下

  3. public class C

  4. {

  5.   public static void main()

  6.   {

  7.   Thread th = new Thread()

  8.   {

  9.   覆盖run方法;

  10.   };

  11.   

  12.   Runnable rb = new Runnable()

  13.   {

  14.   实现run方法;

  15.   };

  16.   

  17.   th.start();

  18.   new Thread(rb),start();

  19.   }

  20. }

  21. 我想问的是这个函数内两种匿名方式有什么区别?
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马