关于多线程生命周期原理

平时我们经常听说asp.net页面生命周期,大致是 创建页面类,打造页面控件树,渲染响应输出页面(当然里面还有很多管道执行处理事件)最后呈现在我们面前就是一个网页(也就我们通常说的页面生命周期!)

今天本人谈谈多线程的生命周期,如有不对还望包涵,多多指教!

首先上上图:

   class Program
    {
        
        static void Main(string[] args)
        {
            //创建线程
            Thread thread = new Thread(run); 
            thread.Start();
            //主线程代码
            for (int i = 0; i < 100; i++)
            {
                Console.WriteLine("main--->"+i);
            }
           
        }

        static void run()
        {
            for (int i = 0; i < 100; i++)
            {
                Console.WriteLine("run"+i);
            }
        }
       
    }  

  

为什么会出现这种输出情况呢?当然你们会想到不是多线程嘛,当然是可以切换的(不错一下,这里也就所谓的异步线程,要是同步线程必须等待另外一个线程结束才行,因为生活有的东西也必须用到同步,取钱就类似),没错这是线程产生的效果,这时候可能你会问,它们为什么输出结果有长有段呢?

下面给出一个图来说说明它们为什么产生这种效果:

新建状态:我们运行Main方法(也就是创建线程,他是一个主线)默认调statrt--->就绪状态

就绪状态:表示有权限获取cpu的时间片,就是获取cpu分配执行这个线程的时间(说到这里你可能会明白一些东西,为什么相互切,为输它输出多一点,它要输出少一点!当然是分配的时间长短不一样!)----->运行状态

运行状:也就是就绪状态拿到cpu分配的时间片之后就进入运行状态

如输出:  main--->0 1  2 3  4 在输入run 0 1 2 3  因为main线程分配的cpu时间片只有那么一点时间如0.001s 运行状态方法没有执行完它的时间就用完了,从而进入

阻塞状态,在去请求cpu分配执行时间片,当main时间片执行完了之后,thread线程它在创建的时候当然也分配时间。哥们你搞完了(搞完的是刚才的时间片哦),该我了!!!!

所以就一直这样搞下去(当然接着上一次执行哦!),到线程销亡(所以就出现我们看到的效果!)。

不从:上面输出有长有短,就是获取的cpu时间片长短不一样!主线程的执行for 时候,执行到输出 main 4 时间片就用完..同理run方也是一样的!

下面上图看程序输出的不同结果!(看到效果再去看上面那个线程生命周期图)

好了,就说到这里,如有说的不对的地方,欢迎指出就好,方不要丢砖哦!

posted @ 2013-05-18 14:16  KyrieYang  阅读(2631)  评论(0编辑  收藏  举报