下面的程序为何执行runs2.sleep(5000);是main线程sleep 5 秒而不是子线程sleep 5秒啊,runs2是一个子线程啊对吧;
还有一个,能不能再main()里面让子线程sleep啊;怎么弄
import java.util.*;
public class TestInterrupt {
public static void main(String[] args) {
Runs2 runs2 = new Runs2();
runs2.start();
try {
runs2.sleep(5000);
} catch(InterruptedException e) {
}
runs2.interrupt();
}
}
class Runs2 extends Thread {
boolean flag = true;
public void run() {
while(flag) {
try {
System.out.println("----"+new Date()+"----");
sleep(500);
} catch(InterruptedException e) {
flag = false;
}
}
}
}
------解决方案--------------------------------------------------------
- Java code
import java.util.*;public class s { public static void main(String[] args) { Runs2 runs2 = new Runs2(); runs2.start(); try { /*static void sleep(int i) ,可见,sleep是静态方法,而静态方法跟对象(如Runs2)是没直接关系的, 但也仍可以使用 对象.sleep(5000 )方法,不过那等效于Thread.currentThread().sleep(5000); (当前线程睡5秒) 静态方法的存在只和类有直接关系,所以也等效于( Thread.sleep(5000) ) 而现在的try语句块是在main中,而不是Run2的代码块中,所以睡的就是main了。 核心问题就在于static 方法是依赖于类,而独力于对象的,也就是说没有对象仍旧能使用sleep(5000)只有在一个类里 声明他是static 方法,那就可以用 类名.静态方法() 来直接调用,这是很重要的基础知识; */ Thread.sleep(2500); Thread.currentThread().sleep(2500);// 所以上面两行代码和你的run2.sleep(5000);是等效的 } catch (InterruptedException e) { } runs2.interrupt(); }}class Runs2 extends Thread { boolean flag = true; public void run() { while (flag) { try { System.out.println("----" + new Date() + "----"); sleep(500); } catch (InterruptedException e) { flag = false; } } }}