c# 多线程的几种方式 【转载】

news/2024/10/6 10:34:39

1.什么是线程?

进程作为操作系统执行程序的基本单位,拥有应用程序的资源,进程包含线程,进程的资源被线程共享,线程不拥有资源。

 

2.前台线程和后台线程的区别?

程序关闭时,后台线程直接关闭,但前台线程会执行完后关闭。

通过Thread类新建线程默认为前台线程。其他方式创建的都是后台线程。

 

多线程的几种方式

一. 异步多线程

复制代码
        static void Main(string[] args){Console.WriteLine("----------主程序开始,线程ID是{0}-----------------", Thread.CurrentThread.ManagedThreadId);for(int i = 0; i< 5;i++){Action<string> action = t =>{for(int k = 0; k< 1000000000;k++){ }Console.WriteLine("当前参数是{0},当前线程是{1}",t,Thread.CurrentThread.ManagedThreadId);};action.BeginInvoke("参数是" + i, null, null);}Console.WriteLine("----------主程序结束,线程ID是{0}-----------------", Thread.CurrentThread.ManagedThreadId);Console.Read();}}
复制代码

二. Threads线程

复制代码
        static void Main(string[] args){Console.WriteLine("----------主程序开始,线程ID是{0}-----------------", Thread.CurrentThread.ManagedThreadId);for(int i = 0; i< 5;i++){ParameterizedThreadStart threadStart = t =>{for (int k = 0; k < 1000000000; k++){ }Console.WriteLine("当前参数是{0},当前线程是{1}", t, Thread.CurrentThread.ManagedThreadId);};Thread thread = new Thread(threadStart);thread.Start(i);}Console.WriteLine("----------主程序结束,线程ID是{0}-----------------", Thread.CurrentThread.ManagedThreadId);Console.Read();}
复制代码

三. ThreadPool线程池

复制代码
        static void Main(string[] args){Console.WriteLine("----------主程序开始,线程ID是{0}-----------------", Thread.CurrentThread.ManagedThreadId);for(int i = 0; i< 5;i++){WaitCallback waitCallback = t =>{for (int k = 0; k < 1000000000; k++){ }Console.WriteLine("当前参数是{0},当前线程是{1}", t, Thread.CurrentThread.ManagedThreadId);};ThreadPool.QueueUserWorkItem(waitCallback, i);}Console.WriteLine("----------主程序结束,线程ID是{0}-----------------", Thread.CurrentThread.ManagedThreadId);Console.Read();}
复制代码

四. Task

复制代码
        static void Main(string[] args){Console.WriteLine("----------主程序开始,线程ID是{0}-----------------", Thread.CurrentThread.ManagedThreadId);TaskFactory taskFactory = new TaskFactory();for (int i = 0; i< 5;i++){Action<object> action = t =>{for (int k = 0; k < 1000000000; k++){ }Console.WriteLine("当前参数是{0},当前线程是{1}", t, Thread.CurrentThread.ManagedThreadId);};taskFactory.StartNew(action,i);}Console.WriteLine("----------主程序结束,线程ID是{0}-----------------", Thread.CurrentThread.ManagedThreadId);Console.Read();}
复制代码

五. Parallel

复制代码
        static void Main(string[] args){Console.WriteLine("----------主程序开始,线程ID是{0}-----------------", Thread.CurrentThread.ManagedThreadId);Action action1 = () =>{for (int k = 0; k < 1000000000; k++){ }Console.WriteLine("当前参数是1,当前线程是{0}", Thread.CurrentThread.ManagedThreadId);};Action action2 = () =>{for (int k = 0; k < 1000000000; k++){ }Console.WriteLine("当前参数是2,当前线程是{0}", Thread.CurrentThread.ManagedThreadId);};Action action3 = () =>{for (int k = 0; k < 1000000000; k++){ }Console.WriteLine("当前参数是3,当前线程是{0}", Thread.CurrentThread.ManagedThreadId);};Parallel.Invoke(action1, action2, action3);Console.WriteLine("----------主程序结束,线程ID是{0}-----------------", Thread.CurrentThread.ManagedThreadId);Console.Read();}
复制代码

上面简单介绍了5种多线程的使用方式,后续文章会记录每种多线程的详细使用方法.

转载:

https://www.cnblogs.com/yangxi1081/p/9639958.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/28493.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

01选择排序

01选择排序 1.选择排序含义每次选择最小的,放到左侧。持续进行。2.示例代码: def selectionSort(arr):for i in range(len(arr) - 1):# 记录最小数的索引minIndex = ifor j in range(i + 1, len(arr)):if arr[j] < arr[minIndex]:minIndex = j# i 不是最小数时,将 i 和最…

Luminar Neo 1.19.0 (macOS Universal) - 创新 AI 图像编辑器

Luminar Neo 1.19.0 (macOS Universal) - 创新 AI 图像编辑器Luminar Neo 1.19.0 (macOS Universal) - 创新 AI 图像编辑器 利用尖端的人工智能生成技术,轻松增强照片效果 请访问原文链接:Luminar Neo 1.19.0 (macOS Universal) - 创新 AI 图像编辑器,查看最新版。原创作品,…

Burp Suite Professional 2024.4 for Windows x64 - 领先的 Web 渗透测试软件

Burp Suite Professional 2024.4 for Windows x64 - 领先的 Web 渗透测试软件Burp Suite Professional 2024.4 for Windows x64 - 领先的 Web 渗透测试软件 世界排名第一的 Web 渗透测试工具包 请访问原文链接:Burp Suite Professional 2024.4 for Windows x64 - 领先的 Web 渗…

Burp Suite Professional 2024.4 for macOS x64 ARM64 - 领先的 Web 渗透测试软件

Burp Suite Professional 2024.4 for macOS x64 & ARM64 - 领先的 Web 渗透测试软件Burp Suite Professional 2024.4 for macOS x64 & ARM64 - 领先的 Web 渗透测试软件 世界排名第一的 Web 渗透测试工具包 请访问原文链接:Burp Suite Professional 2024.4 for macOS …

为什么会查询不到DNS信息?怎么排查?

DNS(域名系统)是将域名转换为相应 IP 地址的关键系统。查询 DNS 信息具有重要作用,通过查询 DNS 信息,我们可以知道域名对应的 IP 地址,这是最主要的信息,使设备能与目标服务器进行通信;其次是域名的相关记录,如 MX 记录(邮件交换记录)等,了解与邮件服务相关的信息;…

【动画进阶】巧用 CSS/SVG 实现复杂线条光效动画

最近,群里在讨论一个很有意思的线条动画效果,效果大致如下:简单而言,就是线条沿着不规则路径的行进动画,其中的线条动画可以理解为是特殊的光效。 本文,我们将一起探索,看看在不使用 JavaScript/Canvas 的基础上,使用纯 CSS/SVG 的方式,我们可以如何大致的还原上述的线…

mysql查询语句数组下标截取

#["广东省","汕头市","龙湖区"]SELECT a.`register_address` AS 工商地址,a.`dismantle_address`, REPLACE (dismantle_address->$[0],",) AS 省,REPLACE (dismantle_address->$[1],",) AS 市,REPLACE (dismantle_address->$…

JavaScript 流程控制语句详解:if语句、switch语句、while循环、for循环等

JavaScript,作为一种广泛使用的编程语言,它的流程控制语句是构建逻辑和实现功能的基础。流程控制语句包括条件语句、循环语句和转向语句,它们是编程中不可或缺的部分。 接下来,我们将一一解析这些语句,带你走进JavaScript的世界。 一、什么是流程控制语句 流程控制语句是用…