我理解的输出结果应该是:
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
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
那么这些线成什么时候会得到CPU呢?
按照系统的线程调度策略,在主线程交出控制权(CPU)的时候,系统线程调度器就会从Ready队列中选择出一个符合条件的线程开始运行,所谓符合条件包括线程的优先级、年龄、状态等等。
主线程在进行I/O输出、睡眠、等待消息或者时间片用完时,会被系统调度器剥夺控制权,变成相应的Wait或者Ready状态。
thread1.Start();
thread2.Start();
thread3.Start(); Console.WriteLine("Thread started");
//End of Main问题就是:这4个语句执行的顺序是什么啊?
thread1.Start();
thread2.Start();
thread3.Start(); Console.WriteLine("Thread started");
//End of Main问题就是:这4个语句执行的顺序是什么啊?
thread1.Start();
thread2.Start();
thread3.Start();
这三个执行完后,可能三个线程都还没有获得CPU的时间片,而主线程还在执行它的时间片,所以先把"Thread started“执行了,后来,这三个线程才顺序获得CPU时间片执行,所以有这个结果!如果有说的不对,麻烦大家纠正,这里是学习的地方,不怕指出!谢谢
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中的代码......