• C# 线程第一单线程基础


    概念

    什么是进程?

    当一个程序被打开运行时,它就是一个进程。在进程中包括线程,进程可以由一个或多个线程组成。

    什么是线程?

    线程是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。

    什么是多线程?

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

    个人总结

      在C#中我们开启一个应用程序就是打开了一个进程,这个进程中包括一个主线程。我们可以在此基础上在增加自己写的单个或多个线程,来执行我们想要完成的任务。

      在Thread线程类中我们常用到的一样方法:

      • Start():启动线程;
      • Sleep(int):静态方法,暂停当前线程指定的毫秒数;
      • Abort():通常使用该方法来终止一个线程;
      • Suspend():该方法并不终止未完成的线程,它仅仅挂起线程,以后还可恢复;
      • Resume():恢复被Suspend()方法挂起的线程的执行。

      在C#中开启一个线程,来执行我们所写的方法。主要是通过ThreadStart代理委托来实现。下面写一些简单代码示例。

    代码示例

     单线程:

    using System;
    using System.Threading;
    
    namespace StudyThread
    {
        class Program
        {
            static void Main(string[] args)
            {
                OneThread();
            }
    
            static void OneThread()
            {
                Thread threadA = new Thread(ThreadMethod);
                threadA.IsBackground = true;   //设置当前子线程为后台线程,为后台线程意味着,主线程关闭后,其他子线程都同时关闭
                threadA.Start();
    
                object ThreadParameter = "P";
                Thread threadB = new Thread(new ParameterizedThreadStart(ThreadMethodParameter));
                threadB.IsBackground = true;
                threadB.Start(ThreadParameter);
    
                Console.WriteLine("Main Write:M");
                Console.ReadLine();
            }
    
            static void ThreadMethod()
            {
                for (int i = 0; i < 10; i++)
                {
                    Console.WriteLine("A");
                }
            }
    
            /// <summary>
            /// 带参数线程
            /// </summary>
            /// <param name="Parameter">只能定义一个object参数,因为委托ParameterizedThreadStart为单参数object类型</param>
            static void ThreadMethodParameter(object Parameter)
            {
                for (int j = 0; j < 10; j++)
                {
                    Console.WriteLine("B"+Parameter);
                }
            }
    
        }
    }
    

    在代理里分别开启两个线程。

    第一个线程ThreadA没带参数,线程运行时去执行ThreadMethod()方法.

    第二个线程ThreadB带上一个Object参数,通过ParameterizedThreadStart委托去执行ThreadMethodParameter(object Parameter)方法.此线程在调用Start()时传入所需参数。

    (写代码时我在想为什么带参数线程只能传一个object参数?看了代码才知道ParameterizedThreadStart只有一个参数没有重载)。

    执行结果:

     

    Main Write:M 为主线程打印。 

    A:为线程ThreadA打印。

    BP:为带参数线程ThreadB打印。

  • 相关阅读:
    Grid search in the tidyverse
    Handling Class Imbalance with R and Caret
    R语言-Kindle特价书爬榜示例 & 输出HTML小技巧(转)
    Centos7下安装部署MXNET
    特征选择, 经典三刀(转)
    vue知识点14
    vue知识点13
    vue知识点12
    vue知识点11
    vue知识点10
  • 原文地址:https://www.cnblogs.com/caokai520/p/4286320.html
Copyright © 2020-2023  润新知