我发现join在循环体使用中会出现意不到的结果,不知道是java的bug,还是我用法的问题.求高手指导
如题
public class Hand implements Runnable {
private String name;
public Hand(String name) {
super();
this.name = name;
}
@Override
synchronized public void run() {
// TODO Auto-generated method stub
for(int i=0;i<4;i++){
System.out.println(name);
}
}
}
public class mainthread {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Hand leftHand=new Hand("我是左手线程");
Hand rightHand=new Hand("我是右手线程");
while(true){
try {
Thread tl=new Thread(leftHand);
tl.start();
System.out.println("1");
tl.join();
System.out.println("2");
for(int i=0;i<3;i++){
if(2==i){
Thread tr=new Thread(rightHand);
tr.start();
tr.join();
}
System.out.println("我是主线程");
}
//Thread.sleep(10);
System.out.println("3");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("4");
}
}
}
运行结果如下
我是左手线程
2
我是主线程
我是主线程
我是右手线程
我是右手线程
我是右手线程
我是右手线程
我是主线程
3
4
1
我是左手线程
我是左手线程
我是左手线程
我是左手线程
2
我是主线程
我是主线程
.........
反正每次运行都不一样
但如果把//Thread.sleep(10);中的注释取消就可以得到我欲期的结果:
1
我是左手线程
我是左手线程
我是左手线程
我是左手线程
2
我是主线程
我是主线程
我是右手线程
我是右手线程
我是右手线程
我是右手线程
我是主线程
3
4
1
我是左手线程
我是左手线程
我是左手线程
------解决方案--------------------我试了,sleep或者不sleep,结果都是正确的,请你仔细看看你的输出。
------解决方案--------------------Java code
tl.start();
System.out.println("1");
tl.join();