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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小痞痞 高级黑马   /  2013-10-6 19:36  /  1355 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 小痞痞 于 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()来获取线程的名字呢?

3 个回复

倒序浏览
  首先是继承Thread类,既然是继承那么可以直接使用Thread类中的方法。
而实现Runnable借口是无法直接使用Thread类中的方法的 ,必须获得线程对象后才能调用
不知道这样说你可能明白
回复 使用道具 举报
第一个实现多线程的方法是定义一个类继承Thread的类,子类就可以使用父类的方法,那么getName()方法是Thread类的非静态方法,那么可以直接使用,默认的是当前对象的调用this;而在第二中实现多线程的方法是实现Runnable接口,在Runnable接口中只有一个方法run方法,而没有getName()方法,所以不能直接调用getName()方法,想使用要么自己写这个方法然后调用要么使用Java为我们提供的方法,在Java中的Thread类中有这个方法,不过这个方法是非静态的方法,不能直接调用,而在Thread类中currentThread()方法是静态的,它可以直接使用类名调用,这个方法返回值是本类对象Thread,   返回对当前正在执行的线程对象的引用,所以它可以接着调用本类中的方法getName()方法。
回复 使用道具 举报
放飞自己365 发表于 2013-10-7 13:21
第一个实现多线程的方法是定义一个类继承Thread的类,子类就可以使用父类的方法,那么getName()方法是Threa ...

谢谢     现在明白了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马