首页 > 编程语言 >C#多线程

C#多线程

时间:2024-03-03 15:22:21浏览次数:28  
标签:多线程 Console C# 线程 WriteLine 执行

在C#编程中,多线程是实现高效并发编程的关键技术之一。通过创建多个线程,程序可以同时执行多个任务,从而充分利用多核处理器的计算能力。本文将带你快速回顾C#多线程的基础知识,通过10分钟的学习,你将能够掌握多线程的核心概念,并学会使用C#语言创建和管理线程。

一、多线程基础概念

在C#中,线程是程序执行流的最小单元。每个线程都拥有独立的执行栈、程序计数器和本地变量。多线程编程允许程序同时执行多个线程,从而实现并发执行。

二、C#多线程实现方式

  1. Thread类:C#中的System.Threading.Thread类用于创建和管理线程。通过继承Thread类并重写Run方法,可以定义线程的执行逻辑。

示例代码:

using System;
using System.Threading;

class MyThread : Thread
{
    public override void Run()
    {
        // 线程执行的代码
        Console.WriteLine("线程开始执行!");
        Thread.Sleep(1000); // 模拟耗时操作
        Console.WriteLine("线程执行结束!");
    }
}

class Program
{
    static void Main()
    {
        MyThread myThread = new MyThread();
        myThread.Start(); // 启动线程

        // 主线程继续执行其他任务
        Console.WriteLine("主线程继续执行其他任务...");

        myThread.Join(); // 等待线程执行完成
        Console.WriteLine("所有任务执行完毕!");
    }
}
  1. ThreadPool:线程池是一个管理线程集合的容器,它允许程序重用已创建的线程,减少线程的创建和销毁开销。使用ThreadPool.QueueUserWorkItem方法可以将任务提交到线程池执行。

示例代码:

using System;
using System.Threading;

class Program
{
    static void Main()
    {
        ThreadPool.QueueUserWorkItem(new WaitCallback(ProcessTask));

        // 主线程继续执行其他任务
        Console.WriteLine("主线程继续执行其他任务...");

        // 等待线程池中的任务完成
        Thread.Sleep(2000);
        Console.WriteLine("所有任务执行完毕!");
    }

    static void ProcessTask(object state)
    {
        // 线程池线程执行的代码
        Console.WriteLine("线程池线程开始执行!");
        Thread.Sleep(1000); // 模拟耗时操作
        Console.WriteLine("线程池线程执行结束!");
    }
}
  1. **Task Parallel Library (TPL)**:TPL是C#中更高级的多线程编程模型,它提供了TaskTask<TResult>类来简化异步编程。使用TPL,可以更容易地编写异步代码,并实现更复杂的并发模式。

示例代码:

using System;
using System.Threading.Tasks;

class Program
{
    static void Main()
    {
        Task task = Task.Run(() =>
        {
            // 异步任务执行的代码
            Console.WriteLine("异步任务开始执行!");
            Task.Delay(1000).Wait(); // 模拟耗时操作
            Console.WriteLine("异步任务执行结束!");
        });

        // 主线程继续执行其他任务
        Console.WriteLine("主线程继续执行其他任务...");

        task.Wait(); // 等待异步任务完成
        Console.WriteLine("所有任务执行完毕!");
    }
}

三、多线程注意事项

  1. 线程同步:多个线程同时访问共享资源时,需要确保线程安全,避免数据竞争和死锁等问题。可以使用锁(lock)、信号量(Semaphore)等同步机制来实现线程同步。

  2. 线程间通信:不同线程之间需要进行通信时,可以使用共享内存、消息队列、信号量等方式实现。

  3. 线程资源消耗:创建过多的线程会消耗大量的系统资源,应合理控制线程的数量。

四、总结

通过本文的学习,你应该已经掌握了C#多线程的基础知识,并学会了使用Thread类、线程池和TPL来创建和管理线程。多线程编程是提高程序性能的重要手段,但在实际应用中需要注意线程安全和资源消耗等问题。希望本文能帮助你快速巩固C#多线程基础,为后续的并发编程打下坚实的基础!

标签:多线程,Console,C#,线程,WriteLine,执行
From: https://www.cnblogs.com/lzhdim/p/18050092

相关文章

  • 网页浏览器Chrome开发者调试工具-Source(源码)-断点调试、条件断点、日志断点
    前言全局说明网页浏览器Chrome开发者调试工具-Source(源码)-断点调试、条件断点、日志断点断点,是某行代码要执行,还没有执行的一个暂停点一、截图对照1.1Chrome浏览器1.1.1蓝色,普通断点1.1.2设置断点类型图中分别是:backpoint:普通断点(蓝色)Conditionalbreakp......
  • unhide 是一款强大的取证工具,主要用于查找和发现被隐藏的进程、TCP/UDP端口以及其他隐
    unhide是一款强大的取证工具,主要用于查找和发现被隐藏的进程、TCP/UDP端口以及其他隐藏技术。其基本技术原理如下:ROOTKIT和LKM:ROOTKIT(RootKit)是一种恶意软件,常用于隐藏恶意活动和进程。它通过修改操作系统的核心组件和内核模块(LinuxKernelModule,LKM)来实现对系统的隐匿。u......
  • 1_IOC容器概述
    IOC容器IOC容器是InvensionofControl的简写,这是一种设计思想,是一个重要的面向对象变成法。Spring通过IOC容器来管理所有Java对象的实例化和初始化,控制对象与对象的依赖关系。我们将由IOC容器管理的Java对象称之为SpringBean,它与使用new关键字创建出来的Java对象没有任何区别......
  • RCE_STUDY
    概念RCE(Remotecodeexecution)远程代码执行漏洞,RCE又分命令执行和代码执行。RCE-远程代码执行:远程执行PHP代码RCE-远程命令执行:远程执行Linux或者Windows等系统命令。常见函数有:PHP:eval(),assert(),preg_replace(),call_user_func(),call_user_func_array()以及array_map......
  • 使用PyCharm完成git操作
    1.使用PyCharm完成git操作1.1克隆项目vss,选择启用版本控制,菜单变为Git选择版本控制工具git输入git仓库地址,选择一个不存在的文件夹输入账号密码1.2修改代码略1.3提交代码1.提交代码 2.推送代码 3.提交并推送代码4.远程仓库结果5.查看操作日志 ......
  • C++中UNIX时间戳与日期互转
    C++中UNIX时间戳与日期互转使用time.h头文件localtime可以把时间戳转为tm结构体,tm结构体中可以格式化输出时间mktime可以把tm结构体转为时间戳tm结构体中:year需要+1900,tm_mon的范围是0-11,tm_mday的范围是1-31structtm{inttm_sec;//secondsaftert......
  • c语言复习
    3-2奇偶分家。输入一个正整数n,再输入n个非负整数,统计奇数和偶数各有多少个#include<stdio.h>intmain(){intcount_odd,count_even,i,n,number;count_odd,count_even,i,n,number;count_odd=0;/*count_odd记录奇数的个数*/count_even=0;/*count......
  • pytorch报错:Variable._execution_engine.run_backward( # Calls into the C++ engine
    GPU模式下运行pytorch代码报错,pytorch为2.2.1,NVIDIA驱动版本535.161.07File"/home/devil/anaconda3/envs/sample-factory/lib/python3.11/site-packages/torch/_tensor.py",line522,inbackwardtorch.autograd.backward(File"/home/devil/anaconda3/envs/sample-......
  • Halcon HObject和C#的Bitmap图像互转
    转载:https://blog.51cto.com/u_15088375/3247784#:~:text=HalconHObject和C%23的Bitmap图像互转1HalconHObject和C%23的Bitmap图像互转2一,Bitmap转HObject3方法一:HOperatorSet.GenImageInterleaved直接转换4方法二:C%23获取图像各个通道内存首地址和HOperatorSet.GenIma......
  • CompletableFuture使用说明
    前言创建线程的方式只有两种:继承Thread或者实现Runnable接口。但是这两种方法都存在一个缺陷,没有返回值Java1.5以后,可以通过向线程池提交一个Callable来获取一个包含返回值的Future对象Future接口的局限性当Future的线程进行了一个非常耗时的操作,那我们的主线程也就阻塞了......