你的第一个线程是每执行一步就sleep(500), 而第二个线程是执行完循环: for(int i=0;i<=5;i++){ System.out.println("i am ok"); } 后才sleep(300), so you get this result 如果泥巴代码改成: class Righthand extends Thread{ public void run(){ for(int i=0;i<=5;i++){ System.out.println("i am ok"); try{ sleep(300); } catch(InterruptedException e){} } } }就好了
代码修改如下:public class G { static Lefthand left; static Righthand right; public static void main(String args[]){ left=new Lefthand(); right=new Righthand(); left.start(); right.start(); } } class Lefthand extends Thread{ public void run(){ for(int i=0;i<=50;i++){ System.out.println("i am a student"); try{ sleep(500); } catch(InterruptedException e){} } } } class Righthand extends Thread{ public void run(){ for(int i=0;i<=50;i++){ System.out.println("i am ok"); /*应当把你的线程休眠放在循环的里面,否着的话这个线程一直输出,直到循环结束,才休息 这时,第一个线程才能运行! */ try{ sleep(300); } catch(InterruptedException e){} } } }程序我测试果,能运行。和你的结果一样!祝你好运!
这个程序的输出是不定的,因为线程得到CPU的时间片是随机的,你多运行几次会发现结果并不完全一样,下面是我运行出来的一个结果: i am a student i am ok i am ok i am a student i am ok i am ok i am a student i am ok i am ok i am a student i am a student i am a student好不容易才得到一个不同的结果,如果你将延时改为:300->3 500->5 再运行,几次运行的结果不一样.
也不一定就能得到你想要的结果,因为多线程的调度是很不确定的
sleep(300);
并不是严格意义的休息300毫秒你应该一个线程在一个对象上调用wait方法等着,直到另一个线程在这个对象上调用notify方法
注意小心死锁
for(int i=0;i<=5;i++){
System.out.println("i am ok");
try{
sleep(300);
}
catch(InterruptedException e){}
}
而第二个线程是执行完循环:
for(int i=0;i<=5;i++){
System.out.println("i am ok");
}
后才sleep(300),
so you get this result
如果泥巴代码改成:
class Righthand extends Thread{
public void run(){
for(int i=0;i<=5;i++){
System.out.println("i am ok");
try{
sleep(300);
}
catch(InterruptedException e){}
}
}
}就好了
static Lefthand left;
static Righthand right;
public static void main(String args[]){
left=new Lefthand();
right=new Righthand();
left.start();
right.start();
}
}
class Lefthand extends Thread{
public void run(){
for(int i=0;i<=50;i++){
System.out.println("i am a student");
try{
sleep(500);
}
catch(InterruptedException e){}
}
}
}
class Righthand extends Thread{
public void run(){
for(int i=0;i<=50;i++){
System.out.println("i am ok");
/*应当把你的线程休眠放在循环的里面,否着的话这个线程一直输出,直到循环结束,才休息
这时,第一个线程才能运行!
*/
try{
sleep(300);
}
catch(InterruptedException e){}
}
}
}程序我测试果,能运行。和你的结果一样!祝你好运!
i am a student
i am ok
i am ok
i am a student
i am ok
i am ok
i am a student
i am ok
i am ok
i am a student
i am a student
i am a student好不容易才得到一个不同的结果,如果你将延时改为:300->3 500->5 再运行,几次运行的结果不一样.