C# 高效率编程 “多线程” 的基本使用

简介: C# 高效率编程 “多线程” 的基本使用

英文意思:

什么是多线程?

比如你需要建房子,如果使用单线程,房子的门,地板,水管等都是你一个人安装,这样效率特别的低 总知就是 “终究还是一个人扛下了所有”。

但是在开一个线程就可以把你一部分工作分给另一人(另一个线程)做,这样就不会导致你累死了(程序的假死)

例图:

image.png

CPU执行方式

单核CPU:

如果在单核CPU运行多线程程序,那么他将在线程中来回切换速度非常的快,感觉不出来

多核CPU:

多核CPU运行多线程,才是真正的多线程,同时执行

下面以例子介绍他的使用方法

实例

命名空间

using System.Threading;

创建一个窗体应用程序

写一个方法

void a() {

for (int i = 0; i <= 1000000; i++){

textBox1.Text = i.ToString();

}

}

按钮里调用

a();//调用方法

运行点击按钮,程序卡死一段时间,这是因为循环在主线程未结束造成的,

但是创建一个线程让他执行程序就不会卡死,把之前的调用删除

按钮里创建线程

Thread th = new Thread(a);

//创建一个线程,执行方法a的代码

th.Start();

//告诉CPU可以执行这个线程了

运行的时候跳异常了 ,这是因为“胯线程”了

跨线程的解决方法

之所以出异常是因为创建的“线程”去访问了“textBox1.Text”

而“textBox1.Text"文本框的控件是在主线程中创建的

解决方法:

在窗体加载的时禁止”跨线程“的检测

CheckForIllegalCrossThreadCalls = false;

//写在窗体下

这样就可以运行了

但是运行的速度非常的快,一秒钟就到大几千了,给他加一个时间间隔

线程的间隔时间

Thread.Sleep(1000);

//间隔1秒 单位:毫秒

这样一秒钟就加一个数字了

程序已经关闭了,为什么Vs中还显示在运行?

因为程序的线程在前台,程序关闭后线程还在继续执行,直到运行完,如果是个死循环那么将不会结束

解决方法:

Thread th = new Thread(a);
   //创建一个线程,执行方法a的代码 
 th.IsBackground = true;
      //在后台执行
   th.Start();
  //告诉CPU可以执行这个线程了

前台线程与后台线程

前台线程(默认):程序关闭但线程还在执行,程序还没真正的关闭,直到代码运行完才关闭,关闭了但还没完全关闭

后台线程:程序关闭后,线程也一起关闭

th.IsBackground = true;

//设置成后台线程

这个例子就结束了!!

线程间参数的传递

这是一个方法体,传递参数到a1 a2 上

static int a (int a1,int a2) {

int b = a1 + a2;

Console.Write(b);

}

传递方式1(建议使用):

Thread th = new Thread(()=>a(1,1));

//创建一个线程,传递两个 1 的参数

th.Start();

//开始线程

===============================

传递方式2(单参数)

方法类型必须是 object 类型的 否则无法传递,而且只能单个参数,必须得类型转换

创建方法:

static void a (object a1) {

int b = Convert.ToInt32(a1);

Console.Write(b);

}

传递参数:

Thread th = new Thread(a);

//创建一个线程

th.Start(“1”);

//开始线程

线程命名

这个好像没什么用…

Thread.CurrentThread.Name = “马冬梅”;

//给当前线程命名(主线程)

Console.WriteLine(Thread.CurrentThread.Name);

//输出主线程的名字

Thread th = new Thread(a);

//创建一个线程

th.Name = “小马哥的棺材”;

//给创建的线程命名

static void  a () 
      {
  Console.WriteLine(Thread.CurrentThread.Name);
          输出当前线程名        "小马哥的棺材"
    }

运行结果:

等待线程执行完后在执行

编写程序中需要等一个线程执行完后在继续执行下面的语句,例如加载一些东西等

th.Join(); //等待这个线程执行完

Thread th = new Thread(a);

//创建一个线程

th.Start(); //开始线程

th.Join(); //等待这个线程执行完

Console.Write(“小马哥的棺材板”);

static   void  a() {
        Console.WriteLine("线程在执行");
        Thread.Sleep(3000);
        //线程间隔3秒                        
    }

使用这个方法需要等待这个线程执行完成后才会继续执行后面的代码

纯手打,点个赞呗~

相关文章
|
16天前
|
安全 Java 数据处理
Python网络编程基础(Socket编程)多线程/多进程服务器编程
【4月更文挑战第11天】在网络编程中,随着客户端数量的增加,服务器的处理能力成为了一个重要的考量因素。为了处理多个客户端的并发请求,我们通常需要采用多线程或多进程的方式。在本章中,我们将探讨多线程/多进程服务器编程的概念,并通过一个多线程服务器的示例来演示其实现。
|
16天前
|
安全 算法 Java
深入理解Java并发编程:线程安全与性能优化
【4月更文挑战第11天】 在Java中,高效的并发编程是提升应用性能和响应能力的关键。本文将探讨Java并发的核心概念,包括线程安全、锁机制、线程池以及并发集合等,同时提供实用的编程技巧和最佳实践,帮助开发者在保证线程安全的前提下,优化程序性能。我们将通过分析常见的并发问题,如竞态条件、死锁,以及如何利用现代Java并发工具来避免这些问题,从而构建更加健壮和高效的多线程应用程序。
|
1天前
|
缓存 Java
Java并发编程:深入理解线程池
【4月更文挑战第26天】在Java中,线程池是一种重要的并发工具,它可以有效地管理和控制线程的执行。本文将深入探讨线程池的工作原理,以及如何使用Java的Executor框架来创建和管理线程池。我们将看到线程池如何提高性能,减少资源消耗,并提供更好的线程管理。
|
6天前
|
存储 安全 网络安全
C#编程的安全性与加密技术
【4月更文挑战第21天】C#在.NET框架支持下,以其面向对象和高级特性成为安全软件开发的利器。本文探讨C#在安全加密领域的应用,包括使用System.Security.Cryptography库实现加密算法,利用SSL/TLS保障网络传输安全,进行身份验证,并强调编写安全代码的重要性。实际案例涵盖在线支付、企业应用和文件加密,展示了C#在应对安全挑战的同时,不断拓展其在该领域的潜力和未来前景。
|
6天前
|
程序员 C#
C#编程中的面向对象编程思想
【4月更文挑战第21天】本文探讨了C#中的面向对象编程,包括类、对象、封装、继承和多态。类是对象的抽象,定义属性和行为;对象是类的实例。封装隐藏内部细节,只暴露必要接口。继承允许类复用和扩展属性与行为,而多态使不同类的对象能通过相同接口调用方法。C#通过访问修饰符实现封装,使用虚方法和抽象方法实现多态。理解并应用这些概念,能提升代码的清晰度和可扩展性,助你成为更好的C#程序员。
|
7天前
|
IDE 程序员 C#
C#编程入门:从零开始的旅程
【4月更文挑战第20天】本文引导初学者入门C#编程,从环境搭建开始,推荐使用Visual Studio Community版作为IDE。接着,通过编写&quot;Hello, World!&quot;程序,介绍基本语法,包括数据类型、运算符和表达式。文章还涉及控制结构、函数和方法,以及面向对象编程概念。通过学习,读者将对C#有初步了解,并激发进一步探索编程世界的兴趣。
|
7天前
|
开发框架 .NET Java
探索 C#编程的奥秘与魅力
【4月更文挑战第20天】C#是微软开发的现代、面向对象的编程语言,以其简洁语法、强大功能和跨平台支持脱颖而出。它支持自动垃圾回收、泛型、委托、LINQ,并广泛应用于桌面、Web、移动和游戏开发。C#拥有活跃的开发者社区和丰富的资源,是Unity游戏开发的首选语言。随着.NET Core,C#可在多个操作系统上运行,持续创新,未来发展潜力巨大。
|
7天前
|
缓存 算法 测试技术
优化 C#编程性能的策略
【4月更文挑战第20天】优化C#性能策略包括:选择合适算法和数据结构,避免频繁对象创建,缓存常用数据,减少内存分配,使用异步编程,优化数据库操作(如合理查询和使用索引),利用多线程并行处理,精简代码,使用性能分析工具,硬件升级,以及进行性能测试。综合应用这些策略可提升程序性能和响应性。
|
9天前
|
安全 Java 调度
Java并发编程:深入理解线程与锁
【4月更文挑战第18天】本文探讨了Java中的线程和锁机制,包括线程的创建(通过Thread类、Runnable接口或Callable/Future)及其生命周期。Java提供多种锁机制,如`synchronized`关键字、ReentrantLock和ReadWriteLock,以确保并发访问共享资源的安全。此外,文章还介绍了高级并发工具,如Semaphore(控制并发线程数)、CountDownLatch(线程间等待)和CyclicBarrier(同步多个线程)。掌握这些知识对于编写高效、正确的并发程序至关重要。
|
10天前
|
缓存 分布式计算 监控
Java并发编程:深入理解线程池
【4月更文挑战第17天】在Java并发编程中,线程池是一种非常重要的技术,它可以有效地管理和控制线程的执行,提高系统的性能和稳定性。本文将深入探讨Java线程池的工作原理,使用方法以及在实际开发中的应用场景,帮助读者更好地理解和使用Java线程池。