C# Thread 线程
Thread 创建和控制线程,设置其优先级并获取其状态
Thread构造函数接收一个无参数或带一个object类型参数的委托
{
Console.WriteLine("********ManagedThreadId:{0} {1}********", Thread.CurrentThread.ManagedThreadId.ToString(""), DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
ParameterizedThreadStart method = o => NoReturnWithParamater(o);
Thread thread = new Thread(method);
thread.Start("");//开启线程,执行委托的内容
}
{
ThreadStart method = DoSomeThing;
Thread thread = new Thread(method);
thread.Start();//开启线程,执行委托的内容
thread.Suspend();//暂停
thread.Resume();//恢复
//thread.Abort();
//线程是计算机资源,程序想停下线程,只能向操作系统通知(线程抛异常),
//会有延时/不一定能真的停下来
Thread.ResetAbort();
//1等待
while (thread.ThreadState != System.Threading.ThreadState.Stopped)
{
Thread.Sleep();//当前线程休息200ms
}
//2 Join等待
thread.Join();//运行这句代码的线程,等待thread的完成
thread.Join();//最多等待1000ms
}
线程操作
1、Start() 使线程处于Running状态,线程开始执行
2、Suspend() 挂起线程,或者如果线程已挂起,则不起作用
3、Resume() 继续执行已挂起的线程
4、Abort()、Abort(Object) 调用此方法通常会终止线程
5、ResetAbort() 取消当前线程所请求的 Abort(Object)
6、Sleep(Int32)、Sleep(TimeSpan) 将当前线程挂起指定的时间
7、Join()、Join(Int32)、Join(TimeSpan) 在继续执行程序,阻止调用线程,直到由该实例表示的线程终止或经过了指定时间为止
前后台线程
区别是:应用程序必须运行完所有的前台线程才可以退出;而对于后台线程,应用程序则可以不考虑其是否已经运行完毕而直接退出,所有的后台线程在应用程序退出时都会自动结束
可以通过设置 IsBackground 属性来更改
public static void threadMethod()
{
Thread.Sleep();
}
Thread thread = new Thread(threadMethod);
// thread.IsBackground = true;
thread.Start()
如果运行上面的代码,程序会等待3秒后退出,如果将注释去掉,将thread设成后台线程,则程序会立即退出
要注意的是,必须在调用Start方法之前设置线程的类型,否则一但线程运行,将无法改变其类型
一般通过Begin...方法运行的线程都是后台线程
线程优先级
高优先级,优先执行,但不代表优先完成 甚至说某些情况下,还有意外发生,不能通过这个来控制线程的执行先后顺序,因为操作系统不需要遵循线程的优先级,线程是计算机资源,程序操作线程,只能向操作系统通知,会有延时/不一定能真的执行
微软文档:
Thread:https://docs.microsoft.com/zh-cn/dotnet/api/system.threading.thread?view=netframework-4.8
C# Thread 线程的更多相关文章
- 学习接水系统(java+thread线程)
(一)项目框架分析 对于学生并发接水项目,根据面向对象的思想,需要创建两个对象,即学生和水龙头. 接下来主要讲解不排队接水和排队接水两张情况. 项目的目录文件如下: (二)不排队接水 假设有四个学生小 ...
- QT5 Thread线程
QT5 Thread线程继承QThread方式 一.首先分析一下 QTimer Class与 Sleep()函数之间的秘密 QTimer *t = new QTimer(*parent); //创建Q ...
- Thread线程join方法自我理解
Thread线程join方法自我理解 thread.join():等待thread线程运行终止,指的是main-thread(main线程)必须等待thread线程运行结束,才能继续thread.jo ...
- java 并发(三)---Thread 线程
Thread 的状态 线程共有五种状态.分别是: (1)新建 (2)就绪 (3)运行 (4)阻塞 (5)死亡 ,下面列列举的状态需要结合状态示意图更好理解. 新建状态(New): 新创建了一个线程对 ...
- c++11中关于`std::thread`线程传参的思考
关于std::thread线程传参的思考 最重要要记住的一点是:参数要拷贝到线程独立内存中,不管是普通类型.还是引用类型. 对于传递参数是引用类型,需要注意: 1.当指向动态变量的指针(char *) ...
- Thread 线程池
Thread 线程池: 当使用多个较短存活期的线程有利时,运用线程池技术可以发挥作用.运用这一技术时,不是为每个任务创建一个全新的线程,而可以从线程池中抽出线程,并分配给任务.当线程完成任务后,再把它 ...
- Thread线程的基础知识及常见疑惑点
引言 相信各位道友在平时工作中已经很少直接用到Thread线程类了,现在大多是通过线程池或者一些多线程框架来操作线程任务,但我觉得还是有必要了解清楚Thread线程类中各种方法的含义,了解了底层才能更 ...
- Thread线程框架学习
原文:https://www.cnblogs.com/wangkeqin/p/9351299.html Thread线程框架 线程定义:线程可以理解为一个特立独行的函数.其存在的意义,就是并行,避免了 ...
- std::thread线程库详解(2)
目录 目录 简介 最基本的锁 std::mutex 使用 方法和属性 递归锁 std::recursive_mutex 共享锁 std::shared_mutex (C++17) 带超时的锁 总结 简 ...
- Thread线程控制之sleep、join、setDaemon方法的用处
Thread线程控制之sleep.join.setDaemon方法的用处 1. sleep方法 public static void sleep(long millis) throws Interru ...
随机推荐
- python初识-环境搭建,变量,条件,循环语句
1.python环境搭建: (1)安装Anaconda ,可选择非C盘安装: 注意:都勾选: (2)安装Pycharm 默认安装即可,安装过程同样都勾选: (3)破解Pycharm https://w ...
- json序列化反序列化Jackson相关注解
1.@Transient @Transient表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性:如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则ORM框架 ...
- 《Windows内核安全与驱动开发》 3.1 字符串操作
<Windows内核安全与驱动开发>阅读笔记 -- 索引目录 <Windows内核安全与驱动开发> 3.1 字符串操作 一.字符串的初始化 1. 判断下列代码为什么会蓝屏? U ...
- Linux下设置mysql不区分大小写
一.通过命令查看mysql是否是区分大小写的 show variables like '%case_table%'; lower_case_table_names=1(说明是不区分大小写的) lowe ...
- .Net Core下使用MQTT协议直连IoT平台
[摘要] .Net平台通过原生MQTT接口,作为南向设备对接OceanConnect平台 因为种种历史原因吧,目前华为平台上对.net的支持案例SDK确实比较少,当看到各种语言的SDK和Demo,唯独 ...
- [译]C#8.0中一个使接口更加灵活的新特性-默认接口实现
9月份的时候,微软宣布正式发布C#8.0,作为.NET Core 3.0发行版的一部分.C#8.0的新特性之一就是默认接口实现.在本文中,我们将一起来聊聊默认接口实现. 众所周知,对现有应用程序的接口 ...
- NRF5340首款双核处理器无线SoC
nRF5340基于Nordic经过验证并在全球范围广泛采用的nRF51和nRF52系列多协议SoC而构建,同时引入了具有先进安全功能的全新灵活双处理器硬件架构,支持包括蓝牙5.1/低功耗蓝牙 (Blu ...
- react-native StatusBar透明
目录 一 react-native 自定义AppStatusBar 二 配置 android 一 react-native 自定义AppStatusBar 透明 StatusBar字体黑色, 否则是白 ...
- Java修炼——IO流的概念以及其分类
IO流的基本概念: 流的原理: 1) 在 Java 程序中,对于数据的输入/输出操作以"流" (stream) 方式进行: 2) J2SDK 提供了各种各样的"流&quo ...
- 2019牛客全国多校第八场A题 All-one Matrices(单调栈)
题意:让你找最大不可扩展全1子矩阵的数量: 题解:考虑枚举每一行为全1子矩阵的的底,然后从左到右枚举:up[i][j]:表示(i,j)这个位置向上可扩展多少,同时还有记录每个位置(i,j)向左最多可扩 ...