黑马程序员技术交流社区

标题: 关于多线程获取线程名字的问题 [打印本页]

作者: 小痞痞    时间: 2013-10-6 19:36
标题: 关于多线程获取线程名字的问题
本帖最后由 小痞痞 于 2013-10-7 21:13 编辑
  1. class MyThread extends Thread {
  2.         public void run() {
  3.                 for(int x = 0;x < 10; x++){
  4.                 System.out.println(getName() + "Aaaaaaa");
  5.                 }
  6.         }
  7. }
复制代码
在继承Thread方法中直接用getName就可以获取到线程的名字
  1. class MyThread1 implements Runnable {  
  2.         public void run() {                                       
  3.                 for(int x = 0;x < 10; x++){
  4.                         System.out.println(Thread.currentThread().getName() + "Bbbbbbbbbbb");
  5.                 }
  6.         }
  7. }
复制代码
为啥在使用Runnable接口的时候却要使用Thread.currentThread().getName()来获取线程的名字呢?
作者: ╋☆Love↘七    时间: 2013-10-7 10:03
  首先是继承Thread类,既然是继承那么可以直接使用Thread类中的方法。
而实现Runnable借口是无法直接使用Thread类中的方法的 ,必须获得线程对象后才能调用
不知道这样说你可能明白
作者: 放飞自己365    时间: 2013-10-7 13:21
第一个实现多线程的方法是定义一个类继承Thread的类,子类就可以使用父类的方法,那么getName()方法是Thread类的非静态方法,那么可以直接使用,默认的是当前对象的调用this;而在第二中实现多线程的方法是实现Runnable接口,在Runnable接口中只有一个方法run方法,而没有getName()方法,所以不能直接调用getName()方法,想使用要么自己写这个方法然后调用要么使用Java为我们提供的方法,在Java中的Thread类中有这个方法,不过这个方法是非静态的方法,不能直接调用,而在Thread类中currentThread()方法是静态的,它可以直接使用类名调用,这个方法返回值是本类对象Thread,   返回对当前正在执行的线程对象的引用,所以它可以接着调用本类中的方法getName()方法。
作者: 小痞痞    时间: 2013-10-7 21:11
放飞自己365 发表于 2013-10-7 13:21
第一个实现多线程的方法是定义一个类继承Thread的类,子类就可以使用父类的方法,那么getName()方法是Threa ...

谢谢     现在明白了





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