黑马程序员技术交流社区

标题: 关于继承Thread类的问题 [打印本页]

作者: 蔡少凯    时间: 2013-1-7 20:41
标题: 关于继承Thread类的问题
public class Test21 {
public static void main(String[] args) {
  MyThread mt = new MyThread();
  mt.start();
}
}
class MyThread extends Thread{
public void run(){
  try {
   //this.sleep(1000); 正确
   Thread.sleep(1000);
   //mt.sleep(1000); 错误 报错
   System.out.println();
  } catch (InterruptedException e) {
   e.printStackTrace();
  }
}
}
MyThread不是继承Thread类吗 为什么不能使用其对象调用sleep方法
而是以this则可以 this不是只想该实例化对象吗?

作者: 夏振博    时间: 2013-1-7 21:07
本帖最后由 arno942 于 2013-1-7 21:27 编辑

如果在加一个线程的话 它的就是不mt了,会变成mt1,mt2 等等 你想想 MyThread 还能用吗?
this 能用是因为谁调用它就是谁。
看代码
  1. public class Test21 {
  2.         public static void main(String[] args) {
  3.                 MyThread mt = new MyThread();
  4.                 MyThread mt1 = new MyThread();
  5.                 mt.start();
  6.                 mt1.start();

  7.         }
  8. }
  9. class MyThread extends Thread{
  10.         public void run(){
  11.          try {
  12.                 //this.sleep(1000); 正确
  13.                  Thread.sleep(1000);
  14.                 //mt.sleep(1000); 错误 报错
  15.                  System.out.println();
  16.                 } catch (InterruptedException e) {
  17.                                  e.printStackTrace();
  18.                 }        
  19.         }
  20. }
复制代码

作者: 熊永标    时间: 2013-1-7 21:12
  1. package demo1;

  2. class Test21 {
  3.         public static void main(String[] args) {
  4.                 MyThread mt = new MyThread();
  5.                 try {
  6.                         mt.sleep(1000);
  7.                 } catch (InterruptedException e) {
  8.                         // TODO Auto-generated catch block
  9.                         e.printStackTrace();
  10.                 }
  11.                 mt.start();
  12.         }
  13. }

  14. class MyThread extends Thread {
  15.         public void run() {
  16.                 try {
  17.                         // this.sleep(1000); 正确
  18.                         Thread.sleep(1000);
  19.                         // mt.sleep(1000); 错误 报错
  20.                         System.out.println();
  21.                 } catch (InterruptedException e) {
  22.                         e.printStackTrace();
  23.                 }
  24.         }
  25. }
复制代码
是可以的,你看我的代码,你这个报错是找不到对象mt,因为你的mt是main方法内,属于局部变量,不可以被外部所访问的。还有一点,sleep是Thread的静态方法,不推荐使用对象来访问,而是应该通过类名来访问。
作者: 何竹冬    时间: 2013-1-7 21:46
你好
sleep是Thread类的静态方法,表示暂停当前线程一段时间后自动恢复。
Thread.sleep(1000);不用创建Thread实例。




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