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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 蔡少凯 中级黑马   /  2013-1-7 20:41  /  1468 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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不是只想该实例化对象吗?

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

3 个回复

倒序浏览
本帖最后由 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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
  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的静态方法,不推荐使用对象来访问,而是应该通过类名来访问。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
你好
sleep是Thread类的静态方法,表示暂停当前线程一段时间后自动恢复。
Thread.sleep(1000);不用创建Thread实例。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马