java[新手]静态方法在哪里调用 ?多线程
Thread类:publicclassThreadYieldextendsThread{publicThreadYield(Stringname){super(name)...
Thread类:
public class ThreadYield extends Thread{
public ThreadYield(String name) {
super(name);
}
@Override
public void run() {
for(int i=0; i<100; i++){
System.out.println(getName()+" "+i);
Thread.yield(); //★★为什么静态方法yield在这里调用就可以实现效果?
Thread.sleep(); //★★同上,为什么静态方法sleep在这里调用有效果?
}
}
}
Test类:
public class Test {
public static void main(String[] args) {
ThreadYield ty1 = new ThreadYield("A");
ThreadYield ty2 = new ThreadYield("B");
//Thread.yield(); ★★ 而如果把yield方法写在这里就不行呢? 出不来效果??
//Thread.sleep(); ★★ 同上,sleep方法在这里用就不行呢??
ty1.start();
ty2.start();
}
}
如上,为什么静态方法yield和sleep在测试类调用就完全没效果啊 ?
还有一个问题就是,为什么sleep方法和yield方法不能重写,但是run必须要重写啊?
求大神~~~~~· 谢谢~~~ 展开
public class ThreadYield extends Thread{
public ThreadYield(String name) {
super(name);
}
@Override
public void run() {
for(int i=0; i<100; i++){
System.out.println(getName()+" "+i);
Thread.yield(); //★★为什么静态方法yield在这里调用就可以实现效果?
Thread.sleep(); //★★同上,为什么静态方法sleep在这里调用有效果?
}
}
}
Test类:
public class Test {
public static void main(String[] args) {
ThreadYield ty1 = new ThreadYield("A");
ThreadYield ty2 = new ThreadYield("B");
//Thread.yield(); ★★ 而如果把yield方法写在这里就不行呢? 出不来效果??
//Thread.sleep(); ★★ 同上,sleep方法在这里用就不行呢??
ty1.start();
ty2.start();
}
}
如上,为什么静态方法yield和sleep在测试类调用就完全没效果啊 ?
还有一个问题就是,为什么sleep方法和yield方法不能重写,但是run必须要重写啊?
求大神~~~~~· 谢谢~~~ 展开
1个回答
推荐于2016-09-05
展开全部
yield和sleep可以在run中调用主要是因为类ThreadYield继承了thread,在子类方法里面调用父类方法很正常。run要重写是因为本身thread里面的run就是空的,就是设计出来让你重写的,另两个本身以及实现好了,调用就行了
更多追问追答
追问
后面那个看懂了。
前面的,再问一下,之所以不在测试类调用,是不是也可以说,测试类调用的Thread的sleep方法不是针对我创建的对象而言的 ?所以必须要在子类里面调用 ?
追答
sleep方法属于Thread类中方法,你用run开启这个线程之后你的线程才能睡觉呀
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询