我理解的输出结果应该是:
   Ready to start
   thread1 sleep for 3322 
   thread2 sleep for 3434
   thread3 sleep for 4423
   finish sleeping
   finish sleeping
   finish sleeping
   Thread Started可是真实的输出是
   Ready to start
   Thread Started
   thread1 sleep for 3322 
   thread2 sleep for 3434
   thread3 sleep for 4423
   finish sleeping
   finish sleeping
   finish sleeping
   这个程序执行的顺序究竟是什么?
         thread1.Start();
thread2.Start();
thread3.Start(); Console.WriteLine("Thread started");
这几句的顺序我搞不懂啊:O

解决方案 »

  1.   

    Start()方法调用之后,就把Thread的状态改为Ready, 放入系统Ready线程队列中去,
    那么这些线成什么时候会得到CPU呢?
    按照系统的线程调度策略,在主线程交出控制权(CPU)的时候,系统线程调度器就会从Ready队列中选择出一个符合条件的线程开始运行,所谓符合条件包括线程的优先级、年龄、状态等等。
    主线程在进行I/O输出、睡眠、等待消息或者时间片用完时,会被系统调度器剥夺控制权,变成相应的Wait或者Ready状态。
      

  2.   

    Console.WriteLine("Ready to Start");
    thread1.Start();
    thread2.Start();
    thread3.Start(); Console.WriteLine("Thread started");
    //End of Main问题就是:这4个语句执行的顺序是什么啊?
      

  3.   

    Console.WriteLine("Ready to Start");
    thread1.Start();
    thread2.Start();
    thread3.Start(); Console.WriteLine("Thread started");
    //End of Main问题就是:这4个语句执行的顺序是什么啊?
      

  4.   

    你要理解他们是线程,不是程序顺序问题,
    thread1.Start();
    thread2.Start();
    thread3.Start();
    这三个执行完后,可能三个线程都还没有获得CPU的时间片,而主线程还在执行它的时间片,所以先把"Thread started“执行了,后来,这三个线程才顺序获得CPU时间片执行,所以有这个结果!如果有说的不对,麻烦大家纠正,这里是学习的地方,不怕指出!谢谢
      

  5.   

    Console.WriteLine("Ready to Start");
    thread1.Start();
    thread2.Start();
    thread3.Start(); Console.WriteLine("Thread started");
    //End of Main
    在上面的代码中,4个语句当然是按从上到下执行的,这是个简单的顺序流程。
    但你要知道你调用thread1.Start()后系统只是把thread1这个线程放到等待执行队列中去了,它并没有被马上执行。它要得到调度才能执行。
    一个等待的线程要得到执行有一些条件,正如 flask(狗)所说。而在你的例子中thread1要得到执行至少有一个条件:Main这个线程的执行结束。这样它才会不在占用CPU。
    还有一个概念也许你弄混淆了,你启动了thread1、2、3三个线程,所以那些代码是分别会在这三个线程中执行,而不是象你理解的那样先执行thread1中的代码,再执行thread2中的代码......