当前位置: 首页 > news >正文

C#学习系列相关之多线程(一)----常用多线程方法总结

一、多线程的用途

        在介绍多线程的方法之前首先应当知道什么是多线程, 在一个进程内部可以执行多个任务,而这每一个任务我们就可以看成是一个线程。是程序使用CPU的基本单位。进程是拥有资源的基本单位, 线程是CPU调度的基本单位。多线程的作用不是提高执行速度,而是为了提高应用程序的使用率。我们程序在运行的使用,都是在抢CPU的时间片(执行权),如果是多线程的程序,那么在抢到
CPU的执行权的概率应该比较单线程程序抢到的概率要大.那么也就是说,CPU在多线程程序中执行的时间要比单线程多,所以就提高了程序的使用率.但是即使是多线程程序,那么他们中的哪个线程能抢占到CPU的资源呢,这个是不确定的,所以多线程具有随机。
       多线程就好比在等待水开的同时看报纸,而不是等水开了再开始看报纸。多线程是为了同步完成多项任务,而是为了提高资源使用效率来提高系统的效率。(这个例子并不是很恰当,可以简单理解为水开和看报纸交替执行,交替的速度极快,进而可以看作是两个任务同时执行的)。

二、常用多线程的方法

1、Thread类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;namespace 线程test1005
{class Program{static void Main(string[] args){for (int i = 0; i < 300; i++){Console.Write(1);}Thread t1 = new Thread(() =>{for (int i = 0; i < 300; i++){Console.Write(2);} });t1.Start();for (int i = 0; i < 300; i++){Console.Write(3);}Console.Read();}}
}

   运行结果:

2、通过Task类(最常用的方法)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;namespace 线程test1005
{class Program{static void Main(string[] args){for (int i = 0; i < 300; i++){Console.Write(1);}Task t1 = new Task(() =>{for (int i = 0; i < 300; i++){Console.Write(2);} });t1.Start();for (int i = 0; i < 300; i++){Console.Write(3);}Console.Read();}}
}

运行结果:

在C#中多线程的方法主要就是Task方法,效率高,速度快。

提示:本人准备建立一个技术交流群,会将日常学习工作中遇到的问题和解决方案进行分享,同时也会将代码和学习资料上传进去,有什么不懂的问题可以咨询我!+v:SJS66-12

生活所迫打个广告,本人也代购莆田鞋,不是中间商,工厂直接取货,价格优惠质量保证,都是我自己前去挑选,可以视频选购验货!!希望大家支持!!!赚点生活费!!!+v:SJS66-12

 3、线程池ThreadPool类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;namespace 线程test1005
{class Program{static void Main(string[] args){ThreadPool.QueueUserWorkItem(new WaitCallback(TestThreadPool), new string[] { "test" });for (int i = 0; i < 300; i++){Console.Write(2);}Console.ReadKey();}public static void TestThreadPool(object state){string[] arry = state as string[];//传过来的参数值int workerThreads = 0;int CompletionPortThreads = 0;for (int i = 0; i < 300; i++){Console.Write(1);}ThreadPool.GetMaxThreads(out workerThreads, out CompletionPortThreads);Console.WriteLine(DateTime.Now.ToString() + "---" + arry[0] + "--workerThreads=" + workerThreads + "--CompletionPortThreads" + CompletionPortThreads);}}
}

运行结果:

4、通过begininvoke方法

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;namespace 线程test1005
{class Program{static void Main(string[] args){Action a = teat;a.BeginInvoke(null, null);for (int i = 0; i < 300; i++){Console.Write(2);}Console.ReadKey();}static void teat(){for (int i = 0; i < 300; i++){Console.Write(1);}}}
}

运行结果:

5、async和await方法

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;namespace 线程test1005
{class Program{static void Main(string[] args){test();for (int i = 0; i < 300; i++){Console.Write(3);}Console.Read();}public static async void test(){for (int i = 0; i < 300; i++){Console.Write(1);}await Task.Run(()=> {for (int i = 0; i < 300; i++){Console.Write(2);}});}}
}

运行结果:

本文介绍这几种C#中开启多线程的方法,在后续学习中,会对每一种线程方法进行更深一步的介绍,希望大家多多关注。

http://www.lryc.cn/news/182857.html

相关文章:

  • Vscode爆红Delete `␍`eslintprettier/prettier
  • Mac安装Ecplise产品报错:dose not contain the JNI_CreateJavaVM symbol
  • 如何使用大语言模型来绘制图画
  • 代码随想录算法训练营第23期day11 | 20. 有效的括号、1047. 删除字符串中的所有相邻重复项 、150. 逆波兰表达式求值
  • 数据结构-优先级队列(堆)
  • C++11新特性(语法糖,新容器)
  • 开机可用内存分析Tip
  • 【Python基础】4. 基本语句
  • 兼顾友好与安全,隐私协议 Unijoin 助推新一轮 Web3 浪潮
  • TCP端口崩溃,msg:socket(): Too many open files
  • 基于Laravel 5.6的运动健身类小程序前后端源码
  • NodeMCU ESP8266硬件开发板的熟悉
  • 计算机毕业设计 基于SSM的在线预约导游系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • Mac 挂载 Alist网盘
  • 【多模态融合】TransFusion学习笔记(1)
  • (二)正点原子STM32MP135移植——TF-A移植
  • 将二叉搜索树转化为排序的双向链表
  • 电脑dll丢失应该怎么解决,dll文件丢失怎么恢复方法分享
  • 通达信和同花顺能否实现程序化自动交易股票,量化交易如何实现?
  • 基于Kylin的数据统计分析平台架构设计与实现
  • Linux CentOS7 vim寄存器
  • 摄影后期图像编辑软件Lightroom Classic 2023 mac中文特点介绍
  • 一种4g扫码付费通电控制器方案
  • 桌面自动化工具总结
  • Python入门教程 | Python 常用标准库概览
  • 【JavaScript】读取本地json文件并绘制表格
  • 前端笔试题总结,带答案和解析(一)
  • LeetCode 202 快乐数
  • 国庆作业day6
  • 李沐深度学习记录4:12.权重衰减/L2正则化