日期:2014-05-20  浏览次数:20744 次

卖票——线程,不明白为什么会出现这个结果。
附上代码:
class A implements Runnable{
public int tickets = 100;
String str = new String("haha");

public void run(){
while (true){
synchronized(str){
if (tickets > 0){
System.out.printf("%s线程正在卖出第%d张票\n",
Thread.currentThread().getName(), tickets);
--tickets;
}
else{
break;
}
}
}
}
}

public class TestTickets_2{
public static void main(String [] agrs){
A aa = new A();
Thread t1 = new Thread(aa);
t1.start();
Thread t2 = new Thread(aa);
t2.start();


}
}

上面代码写错了吗?不应该啊,我看郝斌老师的教程视频写的。但是结果:要么全是Thread-0线程(多次执行后的结果这个是结果居多),要么全是Thread-1线程(执行很多次才能见全是这个线程),要么Thread-0线程和Thread-1线程一起出现(多次执行后,这样的结果,出现的少之又少,连续执行10次都可能见不到它一次。就算出现了,Thread-1线程才出现10条左右,剩下的全是Thread-0线程的。),我看视频教程的时候,郝斌老师的结果不是这样的啊,他的结果:Thread-0线程和Thread-1线程
都是交替出现的。请问大侠们,我描述我的问题清楚嘛?

------解决方案--------------------
代码没问题,我运行了一下,大多是交替的。
多线程的运行不是可控,运行结果不一致,正常
------解决方案--------------------
你好 我用editplus 运行 前两次全是 线程一 在执行 第三次出现了线程0

用dos cmd 第一次就 有 0和 一线程

你的应该没有错误



答案同二楼
------解决方案--------------------
把线程睡一小会了,效果就明显了。这个跟代码没问题。