首页 > 编程语言 >(五十六)C#编程基础复习——C#多线程

(五十六)C#编程基础复习——C#多线程

时间:2024-01-10 17:38:11浏览次数:22  
标签:Console Thread C# System 线程 using 五十六 多线程

多线程就是多个线程同时工作的过程,我们可以将线程看作是程序的执行路径,每个线程都定义了一个独特的控制流,用来完成特定的任务。如果你的应用程序涉及到复杂且耗时的操作,那么使用多线程来执行是非常有益的。使用多线程可以节省CPU资源,同时提高应用程序的执行效率,例如现代操作系统对编程的视线就用到了多线程。到目前为止我们编写的示例程序都是单线程的应用程序,这样的应用程序一次只能执行一个任务。

一、线程的生命周期

线程生命周期开始于我们创建System.Threading.Thread类对象的时候,当线程被终止或完成执行时生命周期终止。

下面列出了线程生命周期中的各种状态:

    1.未启动状态:当线程实例被创建但Start方法为被调用时的状况;

    2.就绪状态:当线程准备好运行并等待CPU周期时的状况;

    3.不可运行状态:下面几种情况下线程是不可运行的:

  1. 已经调用Sleep方法;
  2. 已经调用Wait方法;
  3. 通过I/O操作阻塞。

     4.死亡状态:当线程已完成执行或已中止时的状况。

二、主线程

在C#中,System.Threading.Thread类用于处理线程,它允许在多线程应用程序中创建和访问各个线程。在多线程执行的第一个线程称为主线程,当C#程序开始执行时,将自动创建主线程,而使用Thread类创建的线程则称为子线程,你可以使用Thread类的CurrentThread属性访问线程。下面通过示例程序演示主线程的执行:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;

namespace _054
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Thread th = Thread.CurrentThread;
            th.Name = "主线程";
            Console.WriteLine("这是:{0}",th.Name);
            Console.ReadKey();
        }
    }
}

二、Thread类中的属性和方法

三、创建线程

C#是通过扩展Thread类来创建线程的,然后使用扩展的Thread类调用Start()方法开始执行子线程。示例代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;

namespace _054
{
    internal class Program
    {
        public static void CallToChildThread()
        {
            Console.WriteLine("执行子线程");
        }
        static void Main(string[] args)
        {
            ThreadStart childref = new ThreadStart(CallToChildThread);
            Console.WriteLine("在Main函数中创建子线程");
            Thread childThread = new Thread(childref);
            childThread.Start();
            Console.ReadKey();
        }
    }
}

四、管理线程

Threa类提供了各种管理线程的方法,比如可以使用sleep()方法使线程在特定时间段暂停,示例如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;

namespace _055
{
    internal class Program
    {
        public static void CallToChildThrea()
        {
            Console.WriteLine("执行子线程");
            //线程暂停5000毫秒
            int sleepfor = 5000;
            Console.WriteLine("子线程暂停{0}秒",sleepfor/1000);
            Thread.Sleep(sleepfor);
            Console.WriteLine("继续执行子线程");
        }
        static void Main(string[] args)
        {
            ThreadStart childref = new ThreadStart(CallToChildThrea);
            Console.WriteLine("在Main函数中创建子线程");
            Thread childThread = new Thread(childref);
            childThread.Start();
            Console.ReadKey();
        }
    }
}

 

标签:Console,Thread,C#,System,线程,using,五十六,多线程
From: https://www.cnblogs.com/daihaoliulingyi601/p/17956949

相关文章

  • EasyCVR使用RTMP推流但是通道显示不在线的原因排查
    安防视频监控平台EasyCVR采用了开放式的网络结构,支持高清视频的接入和传输、分发,平台提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云存储等丰富的视频能力,此外,国标GB28181高清可视化视频监控云平台EasyCVR......
  • kubernetes-dashboard crashloopbackoff
    你好,小白!欢迎来到K8S的世界。K8S,也就是Kubernetes,是当今最流行的开源容器编排平台。你在使用中遇到了【kubernetes-dashboardcrashloopbackoff】的问题,这是一个相对常见的问题。别担心,我会帮助你解决它。一、整体流程在解决问题之前,我们先简单了解一下涉及的步骤和整体流程:确认问......
  • 【Oracle】列拆行/对多行数据的单行数据进行分割并多行显示
    【Oracle】列拆行/对多行数据的单行数据进行分割并多行显示参考链接:Oracle一行字符串拆分为多行_oracle一行拆分成多行-CSDN博客背景:要对一个表的字段的内容进行分割,分隔符都是指定的原数据:'1','2','3','4''5','6','7','8'新数据(按照逗号分割):'1......
  • AP8854 宽压降压电源管理芯片12-80V 7v2.5A 应用于电动车手暖套的PBC线路
    AP8854一款宽电压范围降压型DC-D电源管理芯片,内部集成使能开关控制、基准电源、误差放大器、过热保护、限流保护、短路保护等功能,非常适合宽电压输入降压使用。AP8854带使能控制,可以大大节省外围器件,更加适合电池场合使用,具有很高的方案性价比。产品特点:电压输入范围10V至120......
  • cd
    cd命令在Linux中用于改变当前工作目录,可以切换到指定的路径。基本的语法是cd[dirName],其中dirName是要切换的目标目录,可以是相对路径或绝对路径。例如:使用cd命令进入用户主目录。使用cd~命令,无论是root用户还是普通用户,都会进入用户的主目录(也叫home目录)。如果是root用户,cd......
  • 从数据库读写分离到CQRS
    1.数据库读写分离对于数据库的操作就四种:CRUD我们把这四种操作,又划分为两类,读和写 当我们的系统并发量高的时候,自然会考虑到提高数据库性能,数据库读写分离, 但是,实际测试下来,总是有各种不满意的地方。其中最麻烦的就是各种复杂查询的性能,写库有单点故障问题2.CQRS有了......
  • RHCE第三周 文本处理工具
    一:文本查看工具cat,tac,more,less,head,tail,wc这些命令1:cat和tac命令cat这个命令就是从头到尾的显示完整的文件内容,tac就是从尾到头的显示文件内容选项:-n:就是可以显示行数和文件内容-A:这个就是显示文件的不同点,可以看得到空格,这个非常的重要,就是在后面写shell脚本或者剧本的......
  • Windows C盘爆满处理方式
    WindowsC盘发红删除hiberfile.sys文件,我这里已删除Windows10版在搜索框输入“cmd”,以管理员的身份运行MicrosoftWindows[版本10.0.19045.3803](c)MicrosoftCorporation。保留所有权利。C:\WINDOWS\system32>powercfg-hibernateoffC:\WINDOWS\system32>......
  • 解决 clamp 函数会阻断梯度传播
    开端若在网络的forward过程中使用clamp函数对数据进行截断,可能会阻断梯度传播。即,梯度变成零。不妨先做一个实验。定义一个全连接网络fc,通过输入input_t获得结果pred,其值为\(0.02\):fromtorch.nnimportfunctionalasFimporttorch.nnasnnimporttorchfc=nn......
  • 当创建pvc后,kubernetes组件如何协作
    本文分享自华为云社区《当创建一个pvc后,kubernetes会发生什么?》,作者:可以交个朋友。一、背景   外部存储接入Kubernetes的方式主要有两种:In-Tree和Out-of-Tree:In-Tree 是指存储驱动的源码都在Kubernetes代码库中,与Kubernetes一起发布、迭代、管理,这种方式灵活性较差,且......