C#多线程详解(二)
在上一节介绍了线程的基础知识,下面来研究多线程的优先级
using System;
using System.Threading;
namespace Test
{
class TestThread
{
private static void FirstThreadFun()
{
for (int i = 0; i < 10; i++)
{
Console.WriteLine(Thread.CurrentThread.Name + " i = " + i);
}
Console.WriteLine(Thread.CurrentThread.Name + "的优先级:" + Thread.CurrentThread.Priority);
Console.WriteLine(Thread.CurrentThread.Name + " 执行完毕");
}
private static void SecondThreadFun()
{
for (int j = 0; j < 10; j++)
{
Console.WriteLine(Thread.CurrentThread.Name + " j = " + j);
}
Console.WriteLine(Thread.CurrentThread.Name + "的优先级:" + Thread.CurrentThread.Priority);
Console.WriteLine(Thread.CurrentThread.Name + " 执行完毕");
}
static void Main(string[] args)
{
//程序调用了Main()函数时,就起动了一个进程,同时也启动了一个线程[这个线程就是主线程].
Thread.CurrentThread.Name = "MainThread";
//创建第二个线程
Thread secondThread = new Thread(new ThreadStart(TestThread.SecondThreadFun));
//取名为 secondThread
secondThread.Name = "secondThread";
//设定线程的优先级为AboveNormal[在所有创建的新线程中,执行顺序为第二]
secondThread.Priority = ThreadPriority.AboveNormal;
//创建第一个线程
Thread firstThread = new Thread(new ThreadStart(TestThread.FirstThreadFun));
//取名为 firstThread
firstThread.Name = "firstThread";
//设定线程的优先级为最高级[在所有创建的新线程中,最先执行.线程优先级默认为Normal,共5 级:Highest,AboveNormal,Normal,BelowNormal,Lowest]
firstThread.Priority = ThreadPriority.Highest;
for (int z = 0; z < 20; z++)
{
if (z == 10)
{
firstThread.Start();
firstThread.Join();
secondThread.Start();
secondThread.Join();
}
else
{
Console.WriteLine(Thread.CurrentThread.Name + " z = " + z);
}
}
Console.Read();
}
}
}
运行结果:
运行结果显示:
1.主线程永远是最先执行的,但当新线程启动[Thread.Start()],并加入[Thread.Join()]后,主线程会暂停.
2.创建的两个新线程 firstThread 和 secondThread , firstThread的优先级被设为最高 Highest , secondThread的优先级被设为第二.
3.启动和加入也是按顺序的启动 firstThread 先启动加入, secondThread 紧随其后.
4.如果将 firstThread secondThread 的启动[Thread.Start()]顺序调换后会是什么结果?[下节讨论]
线程的优先级
当线程之间争夺CPU时间时,CPU 是按照线程的优先级给予服务的。在C#应用程序中,用户可以设定5个不同的优先级,由高到低分别是Highest,AboveNormal,Normal,BelowNormal,Lowest,在创建线程时如果不指定优先级,那么系统默认为ThreadPriority.Normal。
给一个线程指定优先级,我们可以使用如下代码:
//设定优先级为最低
myThread.Priority=ThreadPriority.Lowest;
通过设定线程的优先级,我们可以安排一些相对重要的线程优先执行,例如对用户的响应等等。
C#多线程详解(二)的更多相关文章
- Java多线程详解(二)
评论区留下邮箱可获得<Java多线程设计模式详解> 转载请指明来源 1)后台线程 后台线程是为其他线程服务的一种线程,像JVM的垃圾回收线程就是一种后台线程.后台线程总是等到非后台线程死亡 ...
- java中多线程详解-synchronized
一.介绍 当多个线程涉及到共享数据的时候,就会设计到线程安全的问题.非线程安全其实会在多个线程对同一个对象中的实例变量进行并发访问时发生,产生的后果就是“脏读”.发生脏读,就是取到的数据已经被其他的线 ...
- python多线程详解
目录 python多线程详解 一.线程介绍 什么是线程 为什么要使用多线程 二.线程实现 threading模块 自定义线程 守护线程 主线程等待子线程结束 多线程共享全局变量 互斥锁 递归锁 信号量 ...
- iOS开发——多线程OC篇&多线程详解
多线程详解 前面介绍了多线程的各种方式及其使用,这里补一点关于多线程的概念及相关技巧与使用,相信前面不懂的地方看了这里之后你就对多线程基本上没有什么问题了! 1——首先ios开发多线程中必须了解的概念 ...
- .NET DLL 保护措施详解(二)关于性能的测试
先说结果: 加了缓存的结果与C#原生代码差异不大了 我对三种方式进行了测试: 第一种,每次调用均动态编译 第二种,缓存编译好的对象 第三种,直接调用原生C#代码 .net dll保护系列 ------ ...
- iOS开发——GCD多线程详解
GCD多线程详解 1. 什么是GCD Grand Central Dispatch 简称(GCD)是苹果公司开发的技术,简单来说,GCD就是iOS一套解决多线程的机制,使用GCD能够最大限度简化多线程 ...
- Java 多线程详解(四)------生产者和消费者
Java 多线程详解(一)------概念的引入:http://www.cnblogs.com/ysocean/p/6882988.html Java 多线程详解(二)------如何创建进程和线程: ...
- PopUpWindow使用详解(二)——进阶及答疑
相关文章:1.<PopUpWindow使用详解(一)——基本使用>2.<PopUpWindow使用详解(二)——进阶及答疑> 上篇为大家基本讲述了有关PopupWindow ...
- Android 布局学习之——Layout(布局)详解二(常见布局和布局参数)
[Android布局学习系列] 1.Android 布局学习之——Layout(布局)详解一 2.Android 布局学习之——Layout(布局)详解二(常见布局和布局参数) 3.And ...
随机推荐
- PYTHON 利用ImagePipeline专门爬取图片
自定义file_path()函数,即可以原有图像文件名为名来保存,并分类保存 def file_path(self, request, response=None, info=None): image ...
- jieba分词处理
分词是一种数学上的应用,他可以直接根据词语之间的数学关系进行文字或者单词的抽象,比如,讲一句话"我来自地球上中国"进行单词分割,我们可能会得到如下的内容:"我" ...
- 13、java——常用类
枚举类型 描述一种事物的所有情况|所有可能|所有实例 (1)通过enum关键字定义枚举类型 (2)枚举的成员,字段都作为当前枚举类型的实例存在,默认被public static final修 ...
- Spring总结之SpringMvc下
五.拦截器 SpringMVC中的拦截器是通过HandlerInterceptor来实现的,定义一个Interceptor有两种方式 1.实现HandlerInterceptor接口或者继承实现了Ha ...
- Python基础之函数的闭包与装饰器的介绍
1.闭包的概念: 如果在一个函数中,定义了另外一个函数,并且那个函数使用了外面函数的变量,并且外面那个函数返回了里面这个函数的引用,那么称为里面的这个函数为闭包. 2.话不多说,以demo示例: de ...
- SAML 2.0 实例分析 sp向idp发送请求(3)
user没有登陆过sp,此时sp向idp发送请求,下文是请求的xml形式 <samlp:AuthnRequest xmlns:samlp="urn:oasis:names:tc:SAM ...
- js中的 true 与 false
可判断为 false 的情况: 0,-0,NaN,undedined,"",false,null,缺省的值 可判断为 true 的情况: 除false的其他情况均可,包括负数.&q ...
- 我的第一个HarmonyOS 应用
第一步:去开发者官网下载IDE:https://developer.harmonyos.com/cn/develop 并根据文档安装 DevEco Studio 第二步.启动IDE并创建自己的第一 ...
- kali操作系统添加中文输入法
今天一通操作真心累啊.想安装搜狗输入法,百度搜索了好多 三步走:https://blog.csdn.net/qq_44110340/article/details/101382732 一顿操作猛如虎, ...
- Django orm 常用查询筛选总结
本文主要列举一下django orm中的常用查询的筛选方法: 大于.大于等于 小于.小于等于 in like is null / is not null 不等于/不包含于 其他模糊查询 model: ...