• c#之线程入门


    C#支持通过多线程并行地执行代码,一个线程有它独立的执行路径,能够与其它的线程同时地运行。一个C#程序开始于一个单线程,这个单线程是被CLR和操作系统(也称为“主线程”)自动创建的,并具有多线程创建额外的线程。这里的一个简单的例子及其输出:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
    
    namespace 博客
    {
        class ThreadTest
        {
            static void Main()
            {
                Thread t = new Thread(WriteY);
                t.Start();                          // Run WriteY on the new thread
                while (true) Console.Write("x");   // Write 'x' forever
            }
    
            static void WriteY()
            {
                while (true) Console.Write("y");   // Write 'y' forever
            }
        }
    }

     主线程创建了一个新线程“t”,它运行了一个重复打印字母"y"的方法,同时主线程重复打印字母“x”。CLR分配每个线程到它自己的内存堆栈上,来保证局部变量的分离运行。在接下来的方法中我们定义了一个局部变量,然后在主线程和新创建的线程上同时地调用这个方法。

    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
    
    namespace 博客
    {
        class ThreadTest
        {
            static void Main()
            {
                new Thread(Go).Start();      // Call Go() on a new thread
                Go();                         // Call Go() on the main thread
            }
    
            static void Go()
            {
                // Declare and use a local variable - 'cycles'
                for (int cycles = 0; cycles < 5; cycles++) Console.Write('*');//打印5个“* ”。
            }
        }
    }

    上述代码中:分别建立了两个线程,运行结果如下,可见副线程与原线程共享数据。

    对于一个线程中的Thread类,有几个至关重要的方法,描述如下:

    Start():启动线程;

    Sleep(int):静态方法,暂停当前线程指定的毫秒数; 

    Abort():通常使用该方法来终止一个线程;

    Suspend():该方法并不终止未完成的线程,它仅仅挂起线程,以后还可恢复; 

    Resume():恢复被Suspend()方法挂起的线程的执行。

    Thread.ThreadState 属性:

    这个属性代表了线程运行时状态,在不同的情况下有不同的值,我们有时候可以通过对该值的判断来设计程序流程。

    ThreadState 属性的取值如下:

    Aborted:线程已停止; 

    AbortRequested:线程的Thread.Abort()方法已被调用,但是线程还未停止; 

    Background:线程在后台执行,与属性Thread.IsBackground有关; 

    Running:线程正在正常运行; 

    Stopped:线程已经被停止; 

    StopRequested:线程正在被要求停止;

    Suspended:线程已经被挂起(此状态下,可以通过调用Resume()方法重新运行);

    SuspendRequested:线程正在要求被挂起,但是未来得及响应; 

    Unstarted:未调用Thread.Start()开始线程的运行; 

    WaitSleepJoin:线程因为调用了Wait(),Sleep()Join()等方法处于封锁状态;

    多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。

    使用多线程可以提高CPU的利用率:在多线程程序中,一个线程必须等待的时候,CPU可以运行其它的线程而不是等待,这样就大大提高了程序的效率。

  • 相关阅读:
    事件处理
    模板语法
    计算属性和侦听器
    Class 与 Style绑定
    Springboot使用redis
    修改docker-toolbox/boot2docker容器镜像
    docker容器如何安装vim
    Maven+Docker,发布到Registry
    Maven + Docker
    Jenkins-SVN + Maven + Docker
  • 原文地址:https://www.cnblogs.com/weifengxiyu/p/4493267.html
Copyright © 2020-2023  润新知