昨天看毕老师讲多线程的教学视频,听完了一个,觉得自己听懂了,学会了,于是就按照毕老师讲课的思路,自己重新写了卖票的代码,代码如下:- class Ticket implements Runnable
- {
- private int num=400;
- public void run()
- {
- Object obj=new Object();
-
- while(true)
- {
- synchronized(obj)
- {
- if(num>0)
- {
- try
- {
- Thread.sleep(8);
- }catch(Exception e){}
- System.out.println(Thread.currentThread().getName()+"....sale : "+ num--);
- }
- }
- }
- }
- }
复制代码 跟毕老师的代码相比,看上去一样。接下来运行了一下,结果却让人大跌眼镜:竟然出现了-1,-2!这怎么可能?我是按照毕老师的视频里面的思路写的呀!问题究竟在哪里?我们把毕老师的代码拿出来,比一比:- class Ticket implements Runnable
- {
- private int tick = 1000;
- Object obj = new Object();
- public void run()
- {
- while(true)
- {
- synchronized(obj)
- {
- if(tick>0)
- {
- //try{Thread.sleep(10);}catch(Exception e){}
- System.out.println(Thread.currentThread().getName()+"....sale : "+ tick--);
- }
- }
- }
- }
- }
复制代码 发现问题了吧!是的,就一句代码的位置不一样。99.9%一样,可是就那0.1%的不一样,结果相差悬殊!
这是我们学习最爱犯的一个毛病!你真的会了吗?不要以为自己听懂了,自己就学会了!只有你亲自动手去写了,才知道你是否真的会了!放下我们那颗骄傲的心吧!动动我们那双懒惰的手吧!让我们做一个“真的会了”的一个人! |
|