java线程调用sleep()问题,下面例子,为什么主方法那 Thread.sleep(),要写Thread?这为啥指主线程,
import java.util.*;
public class TestInterrupt {
public static void main(String[] args) {
MyThread thread = new MyThread();
thread.start();
try {Thread.sleep(10000);}
catch (InterruptedException e) {}
thread.interrupt();
}
}
class MyThread extends Thread {
boolean flag = true;
public void run(){
while(flag){
System.out.println("==="+new Date()+"===");
try {
sleep(1000);
} catch (InterruptedException e) {
return;
}
}
}
} 展开
sleep方法是Thread类的静态方法。
MyThread 中sleep前不用写Thread。是因为MyThread 继承了Thread类。
而TestInterrupt与Thread类无任何关系,所以必须使用Thread.sleep()
如果要写是写继承的方法是MyThread.sleep()还是Thread.sleep()
其实你在MyThread 类中调用 sleep(1000)等价于调用Thread.sleep(1000),也等价于MyThread.sleep(1000)。只不过可以省略类名。
首先,你这个问题,好经典!
我是准备问跟你一样的问题,搜索到该问题的。通过查阅资料、思考后特写写我的一些所获。
你一共提了2个问题:
问题(1):TestInterrupt 类,为什么主方法那 Thread.sleep(),要写Thread?这为啥指主线程。
我的理解:把 Thread.sleep() 理解为当前线程,只是由于 TestInterrupt 类中的代码只会是 主线程在执行,因此说主线程。MyThread 的实例执行 start() 方法后,运行 run() 方法中的代码,这是子线程在执行。其中 也可以写 Thread.sleep(),此时就是子线程执行的。因此,将 Thread.sleep() 理解为当前线程 更贴切,方便理解。
问题(2):MyThread里面,为什么就直接写sleep()呢,静态方法不是要通过类名来引用吗,不是应该MyThread.sleep()吗?
a. 静态方法,也可以通过实例进行调用的;
b. 子类从父类中继承访问限制 大于等于 protected(即 protected 和 public)的方法和成员,子类对这些方法和成员的调用属于内部调用,可直接写成 this.method() 方式 this 关键字也可省略不写。
以上是我的个人理解。