请教售票问题
java吧
全部回复
仅看楼主
level 1
♂温泉♀ 楼主
class MyThread implements Runnable{ // 继承Thread类,作为线程的实现类
private int ticket = 5 ; // 表示一共有5张票
public void run(){ // 覆写run()方法,作为线程 的操作主体
for(int i=0;i<100;i++){
if(this.ticket>0){
System.out.println("卖票:ticket = " + ticket--) ;
}
}
}
};
public class Demo02{
public static void main(String args[]){
MyThread mt = new MyThread() ; // 实例化对象
new Thread(mt).start() ; // 调用线程主体
new Thread(mt).start() ; // 调用线程主体
new Thread(mt).start() ; // 调用线程主体
}
};
为什么这样会出现
5
3
4
2
1
的结果
2011年07月06日 09点07分 1
level 1
因为这句System.out.println("卖票:ticket = " + ticket--) ;
你认为会是什么结果?
2011年07月06日 09点07分 2
level 1
♂温泉♀ 楼主
我认为会是
5
4
3
2
1
的结果
2011年07月06日 09点07分 3
level 1
线程之间是并发的,无法保证顺序
2011年07月06日 09点07分 4
level 1
继续往后看书或者视频就明白了,该死的线程你不“霸占”的话,就会串线,在一个线程没有执行完毕就执行另外的线程了。[鲁拉]哥解释的是不是很通俗
2011年07月06日 09点07分 5
level 13
想保证顺序就为线程作同步。
2011年07月06日 10点07分 6
level 1
♂温泉♀ 楼主
有些明白了
比如结果是
5
3
4
2
1
的话
是不是就是说等于5的线程用完CPU之后,有个线程算到了等于3,然后也抢到了CPU,这样就在5之后输出的是3了。
2011年07月06日 11点07分 7
level 1
没错
2011年07月06日 11点07分 8
level 1
♂温泉♀ 楼主
谢谢了,同时也谢大家!!!
2011年07月06日 11点07分 9
1