黑马程序员技术交流社区

标题: 多线程 [打印本页]

作者: 尹稳定    时间: 2014-6-7 00:34
标题: 多线程
继承Thread和Runnable两张方法中的run方法有什么不同?
作者: never615    时间: 2014-6-7 00:52
run有什么不同?你是要问这两种创建方式有什么不同?
作者: 尹稳定    时间: 2014-6-7 00:59
never615 发表于 2014-6-7 00:52
run有什么不同?你是要问这两种创建方式有什么不同?

额。。就是这两种方法有什么不同,哪种好一点
作者: never615    时间: 2014-6-7 01:54
实现Runnable接口的方式更好!比如你建了一个Student要继承Person,这时候你就不能继承Thread了,只能实现接口,所以一般都实现接口的,继承有局限性。

用起来继承Thread的方法是new 继承Thread的对象,然后直接调用start,见下面的例子

实现接口的方法,要new一个实现接口的对象,在传递给Thread,在调用start,下面也给了例子。


创建线程的两种方式:
创建线程的第一种方式:继承Thread类。步骤:
1,定义类继承Thread。
2,复写Thread类中的run方法。
        目的:将自定义代码存储在run方法。让线程运行。
3,调用线程的start方法,
        该方法两个作用:启动线程,调用run方法。

示例:

  1. class Demo extends Thread
  2. {
  3.     public void run()
  4.     {
  5.         for(int x=0; x<60; x++)
  6.             System.out.println("demo run----"+x);
  7.     }
  8. }
  9. class ThreadDemo
  10. {
  11.     public static void main(String[] args)
  12.     {
  13.         Demo d = new Demo();//创建好一个线程。
  14.         d.start();//开启线程并执行该线程的run方法。
  15.         //d.run();//仅仅是对象调用方法。而线程创建了,并没有运行。
  16.         
  17.         for(int x=0; x<60; x++)
  18.             System.out.println("Hello World!--"+x);
  19.    
  20.     }
  21. }
复制代码



创建线程的第二种方式:实现Runable接口

步骤:
1,定义类实现Runnable接口
2,覆盖Runnable接口中的run方法。
        将线程要运行的代码存放在该run方法中。
3,通过Thread类建立线程对象。
4,将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。 Thread(Runnable target)为什么要将Runnable接口的子类对象传递给Thread的构造函数。
        因为,自定义的run方法所属的对象是Runnable接口的子类对象。所以要让线程去指定指定对象的run方法。就必须明确该run方法所属对象。
     (!!查API可知Runnable里面只有一个run方法,想要运行,就要被对象给Thread()让他在调用start()开启线程)
5,调用Thread类的start方法开启线程并调用Runnable接口子类的run方法。
  1. class Ticket implements Runnable{
  2.     private int tick=100;
  3.     public void run() {
  4.         while(tick>0){
  5.             System.out.println(Thread.currentThread().getName()+"----sale:"+tick--);
  6.         }
  7.     }
  8. }
  9. public class TicketDemo {
  10.     public static void main(String[] args){
  11.         Ticket t=new Ticket();
  12.         Thread t1=new Thread(t,"窗口01");
  13.         Thread t2=new Thread(t,"窗口02");
  14.         Thread t3=new Thread(t,"窗口03");
  15.         Thread t4=new Thread(t,"窗口04");
  16.         t1.start();
  17.         t2.start();
  18.         t3.start();
  19.         t4.start();
  20.     }
  21. }
复制代码




作者: 285619273    时间: 2014-6-7 06:40
Thread类是Runnable接口的一个子类!继承Thread类实现的多线程有单线程限制,而实现Runnable接口的则不会有此限制!但是无论使用Thread类还是Runnable接口,都必须用Thread类的start()方法启动线程!    综上所述建议优先使用Runnable接口来实现多线程功能!
作者: 尹稳定    时间: 2014-6-7 12:06
never615 发表于 2014-6-7 01:54
实现Runnable接口的方式更好!比如你建了一个Student要继承Person,这时候你就不能继承Thread了,只能实现 ...

:victory:赞!
作者: zly1992008    时间: 2014-6-7 12:20
继承了Thread就不能再继承别的类了,因为java只能单继承。所以建议使用Runnable比较好!
作者: wyqs92    时间: 2014-6-7 12:35
run方法都是用于存储任务的!!
作者: 会说话的木头    时间: 2014-6-7 12:51
继承Thread类或者实现Runnable接口.... 没什么不同完全一样实际上Thread类就是实现的Runnable了接口 只不过因为java的单独继承的机制所以Runnable接口用的会多一些
作者: 尹稳定    时间: 2014-6-7 15:43
会说话的木头 发表于 2014-6-7 12:51
继承Thread类或者实现Runnable接口.... 没什么不同完全一样实际上Thread类就是实现的Runnable了接口 只不过 ...

哦哦!谢谢
作者: never615    时间: 2014-6-9 12:15
尹稳定 发表于 2014-6-7 12:06
赞!

:#:#谢谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2