zoukankan      html  css  js  c++  java
  • 关于多线程生命周期原理

    平时我们经常听说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方也是一样的!

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

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

  • 相关阅读:
    NYOJ 527 AC_mm玩dota
    程序员励志小说链接
    android——ListView功能的实现
    调用系统工具
    HDU SPFA算法 Invitation Cards
    nginx sendfile tcp_nopush tcp_nodelay参数解释
    结构体中使用#define定义宏
    HRPlugin For Xcode发布(附源码地址)
    Derby的下载安装和使用,(和JAVA中使用Derby)
    UNIX环境高级编程——进程管理和通信(总结)
  • 原文地址:https://www.cnblogs.com/yzenet/p/3085435.html
Copyright © 2011-2022 走看看