本帖最后由 何仕映 于 2013-3-20 12:07 编辑
为什么加上下面注释的延时语句,多线程就不运行了呢?
求大神分析一下执行过程。- /*
- 将买票的小实例,在建立对象的时候通过单例设计模式保证对象的唯一性
- */
- class Ticket implements Runnable
- {
- private int num = 1000; //设定卖票的数量
- private static Ticket s = null; //通过单例设计模式保证对象的唯一性
- private Ticket(){}
- public static Ticket getTicket()
- {
- if (s==null)
- {
- synchronized(Ticket.class)
- {
- System.out.println(Thread.currentThread().getName()+"-----");
- if(s==null)
- s =new Ticket();
- }
- }
- return s;
- }
- public void run()
- {
- while(num>0)
- // try
- // {
- // Thread.sleep(1); //设定延时 为什么加上这句多线程就不运行呢?
- // }
- // catch (Exception e)
- // {
- // }
- synchronized(Ticket.class)
- {
- System.out.println(Thread.currentThread().getName()+"sale..."+num);
- --num;
- }
- }
- }
- class TicketDemo
- {
- public static void main(String[] args)
- {
- Ticket a = Ticket.getTicket();
- Thread t1 = new Thread(a);
- Thread t2 = new Thread(a);
- Thread t3 = new Thread(a);
- t1.start();
- t2.start();
- t3.start();
- }
- }
复制代码 |