C# 独立线程

文章目录

    • 前言
      • 使用多线程注意事项:
        • 1.线程安全性:
        • 2.线程同步:
        • 3.避免主线程的耗时操作:
        • 4.使用线程池:
        • 5.注意线程的生命周期管理:
        • 6.正确处理线程间通信:
        • 7.考虑线程的优先级和调度:了解操作系统对线程的调度策略,合理设置线程的优先级,确保关键线程能够优先执行。
        • 8.异常处理:
  • 一、 线程的概念
    • 1.1 进程(Process)
    • 1.2 线程(Thread)
    • 2. 线程的状态
    • 3. 线程的优势
    • 4. 线程的劣势
  • 二、代码举例
    • 1. 创建和启动线程
    • 2. 停止线程
    • 3. 线程同步
    • 4. 线程间通信
    • 5. 线程优先级
    • 6. 异步编程
    • 7. 线程池
    • 三.创建4个简易独立线程
  • 总结


前言


使用多线程注意事项:

1.线程安全性:

多线程编程中,由于线程共享内存空间,因此需要注意线程安全性。如果多个线程同时访问和修改同一份数据,可能会导致数据不一致或出现竞态条件。为了确保线程安全,可以使用同步机制,如互斥锁(mutex)、条件变量、信号量等来控制对共享数据的访问。

2.线程同步:

线程同步是确保线程间有序执行的关键。通过同步机制,可以防止多个线程同时访问共享资源,造成数据混乱或死锁。

3.避免主线程的耗时操作:

主线程通常负责处理用户界面更新等任务,如果主线程被耗时操作阻塞,会导致用户界面卡顿。因此,应避免在主线程中执行耗时操作,如网络请求、数据库操作等,而应将这些操作放到子线程中执行。

4.使用线程池:

使用线程池可以复用线程,减少线程的创建和销毁开销,提高应用性能。线程池中的线程可以根据需要动态创建和销毁,有效管理资源。

5.注意线程的生命周期管理:

当不再需要线程时,应及时停止线程,释放相关资源,避免线程泄漏。

6.正确处理线程间通信:

在多线程编程中,线程间可能需要通过共享变量、消息队列等方式进行通信。确保通信的安全性和正确性,避免竞态条件或死锁。

7.考虑线程的优先级和调度:了解操作系统对线程的调度策略,合理设置线程的优先级,确保关键线程能够优先执行。
8.异常处理:

多线程编程中,线程间的异常处理尤为重要。应确保线程能够妥善处理异常情况,避免程序崩溃或数据损坏。

一、 线程的概念

1.1 进程(Process)

定义:进程是操作系统进行资源分配的基本单位,每个进 程拥有独立的内存空间和系统资源。
特点:
每个进程有一个唯一的进程标识符(PID)。
进程之间相互独立,互不影响。
进程之间的通信通常需要通过进程间通信(IPC)机制,如管道、消息队列、共享内存等。

1.2 线程(Thread)

定义:线程是进程内的执行单元,是操作系统能够进行运算调度的最小单位。
特点:
同一个进程内的线程共享该进程的内存空间和资源。
线程之间的通信和同步相对简单,因为它们共享相同的内存空间。
线程的创建和切换开销比进程小得多。

2. 线程的状态

线程在其生命周期中会经历不同的状态。常见的线程状态包括:

+-----------------+
|     新建         |
|  (New)          |
+-----------------+|v
+-----------------+
|     就绪         |
|  (Ready)        |
+-----------------+|v
+-----------------+
|     运行         |
|  (Running)      |
+-----------------+|   \|    \|     \ (等待资源)v      v
+-----------------+  +-----------------+
|     阻塞         |  |     阻塞         |
|  (Blocked)      |  |  (Waiting)      |
+-----------------+  +-----------------+|                 || (资源可用)       | (条件满足)v                 v
+-----------------+  +-----------------+
|     运行         |  |     运行         |
|  (Running)      |  |  (Running)      |
+-----------------+  +-----------------+|                 |v                 v
+-----------------+  +-----------------+
|     终止         |  |     终止         |
|  (Terminated)   |  |  (Terminated)   |
+-----------------+  +-----------------+

图解说明

  • 新建 (New):
    线程对象已创建,但尚未调用 Start 方法。
    线程还没有开始执行。
  • 就绪 (Ready):
    线程已准备好运行,但由于其他线程正在运行而等待调度。
    线程处于可运行状态,等待 CPU 调度。
  • 运行 (Running):
    线程正在 CPU 上执行。
    线程可以执行其任务。
  • 阻塞 (Blocked):
    线程在等待某个条件满足(如资源可用)之前无法继续执行。
    例如,线程可能在等待 I/O 操作完成或等待锁的释放。
  • 等待 (Waiting):
    线程在等待某个特定条件满足(如事件发生)之前无法继续执行。
    例如,线程可能在等待 Monitor.Wait 或 WaitHandle.WaitOne。
  • 终止 (Terminated):
    线程执行完毕或由于某种原因被终止。
    线程不再执行任何任务,资源被释放。
  • 转换关系
    新建 -> 就绪:调用 Start 方法后,线程从新建状态进入就绪状态。
    就绪 -> 运行:当 CPU 调度到该线程时,线程从就绪状态进入运行状态。
    运行 -> 阻塞/等待:线程在等待资源或特定条件时,从运行状态进入阻塞或等待状态。
    阻塞/等待 -> 运行:当资源可用或条件满足时,线程从阻塞或等待状态重新进入运行状态。
    运行 -> 终止

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单臂路由技术,eNSP实验讲解

单臂路由技术,eNSP实验讲解 一、简要介绍1、概念2、工作原理3、优点4、缺点5、应用场景举例 二、eNSP仿真实验1、步骤一:2、步骤二:3、步骤三:4、步骤四: 三、总结。 一、简要介绍 1、概念 单臂路由(Rout…

机器学习—构建一个神经网络

如何在Tensorflow中构建神经网络? 回到之前的例子,如果你想做钱进支柱,初始化数据x创建第一层,如下图所示计算一个1,然后创建第二层并计算一个2,所以这是一种明确的向前推进的方式。 事实证明,…

JMeter与大模型融合应用之jmeter.properties配置文件新增配置

JMeter与大模型融合应用之jmeter.properties配置文件新增配置 背景 Apache JMeter 是一款流行的开源性能测试工具,它允许用户通过创建和运行多种类型的测试来评估应用程序的性能。jmeter.properties 文件是 JMeter 的主要配置文件之一,用户可以在其中进…

ffmpeg:视频字幕嵌入(GPU加速)

实现方案 参考指令 ffmpeg -i input_video.mp4 -vf "subtitlessubtitles.srt" output_video.mp4 解决因文件名称复杂导致的指令执行失败问题(引号给文件框起来) ffmpeg -i "A.mp4" -vf "subtitlesB.srt" "c.mp4&qu…

04_CC2530+Uart串口通信

04_CC2530UART串口通信 串口通信基本概念 串行通信: 数据字节一位位地依次传送的通信方式, 串行通信的速度慢, 但用的传输线条数少, 成本低,适用于远距离的数据传送并行通信: 数据字节的各位同事传送的通信方式, 优点是数据传送速度快, 缺点是占用的传输线条数多,…

基于SSM社区便民服务管理系统JAVA|VUE|Springboot计算机毕业设计源代码+数据库+LW文档+开题报告+答辩稿+部署教+代码讲解

源代码数据库LW文档(1万字以上)开题报告答辩稿 部署教程代码讲解代码时间修改教程 一、开发工具、运行环境、开发技术 开发工具 1、操作系统:Window操作系统 2、开发工具:IntelliJ IDEA或者Eclipse 3、数据库存储&#xff1a…

CSS画icon图标系列(一)

目录 前言: 一、向右箭头 1.原理: 2.代码实现 3.结果展示: 二、钟表 1.原理: 2.代码展示: 3.最终效果: 三、小手机 1.原理: 2.代码展示: 3.最后效果: 四、结…

直播系统搭建教程安装说明

需要安装的软件(宝塔【软件商店】中查找安装): 1.PHP7.0 ~ PHP7.3 需要安装的扩展:(宝塔【PHP管理】【安装扩展】中安装) *PDO PHP Extension * MBstring PHP Extension * CURL PHP Extension * Mylsqi PHP Extension * Redis PHP Extension * fileinfo PHP Extension …

linux笔记(nginx)

一、Nginx 概念 Nginx 是一款轻量级的高性能 Web 服务器、反向代理服务器以及电子邮件(IMAP/POP3)代理服务器。它可以在大多数 Unix/Linux 操作系统上运行,也有 Windows 版本。主要用于处理高并发连接,能够快速、高效地为用户提供…

103 - Lecture 1

Introduction to Database 一、Introduction to Database Systems 1. 数据的定义 What is Data? EX: data could be a docx file storing your project status report; data could be a spreadsheet containing information • 数据只有在设计的场景中才有意义。&#xff…

微信公众号绑定设计-WeChat public platform bing and send message

一 WeChat bind ui 二、message style 三、 consume style 四、send log 五、temp setting

基于Python的乡村居民信息管理系统【附源码】

基于Python的乡村居民信息管理系统 效果如下: 系统主页面 系统登录页面 管理员主页面 居民管理页面 政务学习页面 土地信息管理页面 个人信息管理页面 居民登陆页面 村委人员主页面 研究背景 随着信息技术的飞速发展和乡村振兴战略的深入实施,传统的乡…

MySql中索引为什么用B+树,他有什么特点?时间复杂度是多少?能存多少数据?是不是只能三层?他与B-树有什么不同?还有其它的树你是是否知道?

平衡二叉树 平衡二叉树又被称为AVL树平衡二叉树是一颗空树或者它的左右两个子树的高度差的绝对值不超过1,并且左右子树也是平衡树非叶子节点值大于左子节点值而小于右子节点值非叶子节点最多拥有两个子节点 平衡二叉树的不足之处及时间复杂度 如果每次插入的数据都…

【初阶数据结构篇】链式结构二叉树(续)

文章目录 须知 💬 欢迎讨论:如果你在学习过程中有任何问题或想法,欢迎在评论区留言,我们一起交流学习。你的支持是我继续创作的动力! 👍 点赞、收藏与分享:觉得这篇文章对你有帮助吗&#xff1…

VMWARE ESXI VMFS阵列故障 服务器数据恢复

1:河南用户一台DELL R740 3块2.4T硬盘组的RAID5,早期坏了一个盘没有及时更换,这次又坏了一个,导致整组RAID5处于数据丢失的状态, 2:该服务器装的是VMware ESXI 6.7,用户把3块硬盘寄过来进行数据…

使用docker安装zlmediakit服务(zlm)

zlmediakit安装 zlmediakit安装需要依赖环境和系统配置,所以采用docker的方式来安装不容易出错。 docker pull拉取镜像(最新) docker pull zlmediakit/zlmediakit:master然后先运行起来 sudo docker run -d -p 1935:1935 -p 80:80 -p 8554:554 -p 10000:10000 -p …

uni-app跨域set-cookie

set-cookie的值是作为一个权限控制的 首先,无论什么接口都会返回一个set-cookie,但未登录时,set-cookie是没有任何权限的 其次,登录接口请求时会修改set-cookie,并且在后续其他接口发起请求时,会在请求头…

【论文速读】| PathSeeker:使用基于强化学习的越狱攻击方法探索大语言模型的安全漏洞

基本信息 原文标题: PathSeeker: Exploring LLM Security Vulnerabilities with a Reinforcement Learning-Based Jailbreak Approach 原文作者: Zhihao Lin, Wei Ma, Mingyi Zhou, Yanjie Zhao, Haoyu Wang, Yang Liu, Jun Wang, Li Li 作者单位: Beihang University, Nany…

黑马官网2024最新前端就业课V8.5笔记---HTML篇

Html 定义 HTML 超文本标记语言——HyperText Markup Language。 标签语法 标签成对出现&#xff0c;中间包裹内容<>里面放英文字母&#xff08;标签名&#xff09;结束标签比开始标签多 /拓展 &#xff1a; 双标签&#xff1a;成对出现的标签 单标签&#xff1a;只有开…

NXP Zigbee JN5169 开发环境软件 文档和支持资源打包下载

NXP Zigbe JN5169软件、文档和支持资源下载 从NXP官网下载https://www.nxp.com.cn/pages/jn516x-7x-zigbee-3-0:ZIGBEE-3-0&#xff0c;有点蛋疼网站&#xff0c;要注册会员&#xff0c;所以我打包好所有NXP Zigbe JN5169所需的 软件、文档和支持资源打包好&#xff0c;以供开…