本帖最后由 Jim-剣◆﹏ 于 2013-9-27 13:44 编辑
- class Ticket implements Runnable
- {
- private int tick = 100;
- public void run()
- {
- while(true)
- {
- this.show();
- }
- }
- }
- public synchronized void show()
- {
- if(tick>0)
- {
- try{Thread.sleep(10);}catch(Exception e){}
- System.out.println(Thread.currentThread().getName()+"....show.... : "+ tick--);
- }
- }
- }
- class ThisLockDemo
- {
- public static void main(String[] args)
- {
- Ticket t = new Ticket();
- Thread t1 = new Thread(t);
- Thread t2 = new Thread(t);
- Thread t3 = new Thread(t);
- t1.start();
- t2.start();
- t3.start();
- }
- }
复制代码 毕老师的java基础看到了“第11天-12-多线程(多线程-同步函数的锁是this)”中间五分钟断一段代码执行十分不理解
主要是这段- class Ticket implements Runnable
- {
- private int tick = 100;
- public void run()
- {
- while(true)
- {
- this.show();
- }
- }
- }
复制代码 在run()方法里面,有个while循环,而且条件一直为true,那么就会一直调用show();
下面主函数创建了三个对象分别为t1,t2,t3,假设t1先抢到CPU进入到执行阶段,并且通过了while判断,那么应该是t1永远出不来了,因为while条件一直为真,只能不断执行show();
问题是毕老师在演示的时候竟然成功地实现了多线程,并没有出现我以上所说的情况,这是为什么呢
望黑马大神赐教
|