我在继承自Thread的类T中定义了一个s()方法,在类r的main()方法中,声明了一个T 实例变量g,并调用g.start()方法,然后再调用g.s()方法,为什么执行时先输出s中内容后输出run()中内容?而我在g.start()后添加sleep()方法后,输出结果却反过来了,这是为什么?请各位大侠指点:
public class r{
public static void main(String[] args)
{
T g=new T();
g.start();
/* try{
g.sleep(10);
}catch(InterruptedException e){
System.out.print("exception!");
}*/
g.s();
}
}
class T extends Thread{
private int a;
public T(){
a=0; }
public void run(){
a=a+10;
System.out.print("123");
}
public void s(){
a++;
System.out.print("fdaksfhskakjjksd");
}
}
public class r{
public static void main(String[] args)
{
T g=new T();
g.start();
/* try{
g.sleep(10);
}catch(InterruptedException e){
System.out.print("exception!");
}*/
g.s();
}
}
class T extends Thread{
private int a;
public T(){
a=0; }
public void run(){
a=a+10;
System.out.print("123");
}
public void s(){
a++;
System.out.print("fdaksfhskakjjksd");
}
}
g.start();
只是告诉系统说:“现在线程对象g已经就绪了,你随时可以调度它。”,而并不是告诉系统:“你他妈马上把我停下来,把别的线程都停下来,调度g运行,听见没有!”^_^。
Thread类的sleep()方法是个静态方法,作用是让当前的线程暂停指定的时间
在你的程序中就是让运行main方法的这个线程暂停了10毫秒,而不是让线程g暂停10毫秒
你把当前的线程暂停了10毫秒然后再运行s方法,这时候g没有被暂停,他的run()方法当然更有可能先被执行了.
如果你把10改成大一些的数,比如1000,就更容易看出来到底g.sleep()是把哪个线程暂停了.
说得通俗易懂!