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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 左华清 黑马帝   /  2012-2-18 22:41  /  4022 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 左华清 于 2012-2-19 12:59 编辑

直接继承Thread实现,或是引用接口Runable.

运用内部类实现接口创建? 不太明白,求代码?

6 个回复

倒序浏览
创建线程有两种方式:使用Runnable接口和继承Thread类。使用Runnable接口的实现类来提供线程体,这是创建线程的基本方式。还可以采用直接继承Thread类、重写其中的run()方法并以之作为线程体的方式创建线程,
两种创建线程方式的有两方面的区别。
l     使用Runnable接口创建线程时可以将CPU,代码和数据分开,形成清晰的模型。线程体run()方法所在的类还可以从其他类继承一些有用的属性或方法,并有利于保持程序风格的一致性。
l     直接继承Thread类创建线程时,Thread子类无法再从其他类继承。但这种情况编写简单,run()方法的当前对象就是线程对象,可直接操纵。
至于类部内就new thread(){run方法}

评分

参与人数 1技术分 +1 收起 理由
唐秀启 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 吴文华 于 2012-2-18 23:22 编辑

在Java中创建线程有两种方法:使用Thread类和使用Runnable接口。在使用Runnable接口时需要建立一个Thread实例。因此,无论是通过Thread类还是Runnable接口建立线程,都必须建立Thread类或它的子类的实例。Thread类的构造方法被重载了八次,构造方法如下:

   public Thread( );
  public Thread(Runnable target);
  public Thread(String name);
  public Thread(Runnable target, String name);
  public Thread(ThreadGroup group, Runnable target);
  public Thread(ThreadGroup group, String name);
  public Thread(ThreadGroup group, Runnable target, String name);
  public Thread(ThreadGroup group, Runnable target, String name, long stackSize);
  Runnable target
  实现了Runnable接口的类的实例。要注意的是Thread类也实现了Runnable接口,因此,从Thread类继承的类的实例也可以作为target传入这个构造方法。

    一个普通的Java类只要从Thread类继承,就可以成为一个线程类。并可通过Thread类的start方法来执行线程代码。虽然Thread类的子类可以直接实例化,但在子类中必须要覆盖Thread类的run方法才能真正运行线程的代码。下面的代码给出了一个使用Thread类建立线程的例子:

    001 package mythread;
  002
  003 public class Thread1 extends Thread
  004 {
  005 public void run()
  006 {
  007 System.out.println(this.getName());
  008 }
  009 public static void main(String[] args)
  010 {
  011 System.out.println(Thread.currentThread().getName());
  012 Thread1 thread1 = new Thread1();
  013 Thread1 thread2 = new Thread1 ();
  014 thread1.start();
  015 thread2.start();
  016 }
  017 }
  上面的代码建立了两个线程:thread1和thread2.

评分

参与人数 1技术分 +2 收起 理由
唐秀启 + 2

查看全部评分

回复 使用道具 举报
线程在JAVA中使用Thread来表示。最基本的产生线程的方法是new Thread();然后调用它的start()方法。
一般实现线程的方法有两种:
1,继承Thread类,并重写run()方法。例如:匿名类实现
       Thread thread = new Thread(){
            public void run(){
                System.out.println(Thread.currentThread().getName());
            }
        };
        thread.start();
2,实现Runnable接口,重写run()方法,并作为参数传给Thread()的构造函数。例如:匿名类实现
        Thread thread = new Thread(new Runnable(){
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName());
            }});
3,在使用面向对象思想编程时,一般都会使用第二种方法。并且在JAVA这种单一继承体制下,实现接口显得更加灵活。

评分

参与人数 1技术分 +1 收起 理由
唐秀启 + 1

查看全部评分

回复 使用道具 举报
楼上的几位没有理解楼主要问的问题:为什么要使用内部类创建线程?
要想搞清楚这个问题,首先必须弄清楚,使用内部类的好处:
1、内部类可以访问它所在作用域内的数据,包括私有数据
2、在同一个包中,内部类对于其他类不可见
3、使用匿名内部类可以在写回调函数时,减少代码量,逻辑更紧凑

好,大概就是以上3个好处了,那么再回头看为什么要用内部内来创建线程。
内部类只服务于某个特定的类,用内部类创建的线程一般用来执行某一个支线任务,不需要被外部的任何类访问到。达到隐藏细节,保证线程安全的目的。

评分

参与人数 1技术分 +1 收起 理由
唐秀启 + 1

查看全部评分

回复 使用道具 举报
有两种方式:
第一种 :继承Thread类
第二种:实现Runnable接口
不过一般建议用第二种实现方式,应该这种方式比较灵活一些。你多用用就知道了
回复 使用道具 举报
左华清 黑马帝 2012-2-19 12:59:49
7#
谢谢,学习了!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马