自我学习理解:一个程序中包括多个进程,每个进程包括多个线程,多个线程可同时做不同的事情(说是同时,但它是交换执行的,人感觉像是同时罢了)。

优点:提高CPU的使用率。

线程同步:同步就是指一个线程要等待上一个线程执行完之后才开始执行当前的

线程异步:线程异步是指一个线程去执行,它的下一个线程不必等待它执行完就开始执行

缺点:耗内存.

线程多时难以管理,易出现Bug。

命名空间:using System.Threading;

多线程的几种状态:

Thread类有几个至关重要的方法,描述如下:
Start():启动线程;
Sleep(int):静态方法,暂停当前线程指定的毫秒数;
Abort():通常使用该方法来终止一个线程;
Suspend():该方法并不终止未完成的线程,它仅仅挂起线程,以后还可恢复;
Resume():恢复被Suspend()方法挂起的线程的执行;

thread.Join():等线程执行完后结束线程。

Thread的5种优先级:Highest(最高),AboveNormal(高于正常),Normal(正常),BelowNormal(低于正常),Lowest(最低)

优先级的意思并不是说哪个线程先执行,而是CPU给由优先级高的分配的时间片会多一些。高的比低的执行的次数会多一些,但是顺序不确定。

多线程的简单使用

static void Main(string[] args){Program a = new Program();a.CreateThread();}Thread thread1 = null;Thread thread2 = null;event EventHandler CloseEvent;//定义线程执行完后的事件List<int> lis = new List<int>();private void CreateThread(){thread1 = new Thread(new ThreadStart(function1));thread1.Priority = ThreadPriority.Highest;//设置最高优先级thread2 = new Thread(new ThreadStart(function1));thread2.Priority = ThreadPriority.Lowest;//设置最低优先级thread1.Name = "php1";//线程名称thread2.Name = "php2";CloseEvent += new EventHandler(threadClose);//线程结束时调用thread1.Start();//启动线程开始执行thread2.Start();}void function1(){while (true){//Monitor.Enter(this);//锁定,保持同步if (lis.Count == 100){CloseEvent(this, new EventArgs());}else{int a = new Random().Next(10);lis.Add(a);Console.WriteLine(Thread.CurrentThread.Name+"线程添加了" + a);}//Monitor.Exit(this);//取消锁定//Thread.Sleep(1000);//暂停多少毫秒后执行//thread1.Suspend();//挂起线程//thread1.Resume();//恢复挂起的线程}}void function2(){while (true){//Monitor.Enter(this);//锁定,保存同步if (lis.Count == 100){CloseEvent(this, new EventArgs());}else{int b = new Random().Next();lis.Add(b);Console.WriteLine("线程2添加了" + b);}//Monitor.Exit(this);//取消锁定//Thread.Sleep(1000);//暂停多少毫秒后执行}}void threadClose(object sender, EventArgs e){Console.WriteLine("线程运行结束!");Console.ReadLine();thread1.Abort();thread2.Abort();}

  

  

  

 

转载于:https://www.cnblogs.com/Evan-Pei/p/3332672.html

C# Thread多线程学习相关推荐

  1. java线程学习,GitHub - zksir/thread: Java多线程学习

    Java多线程学习 threadcoreknowledge包----线程核心知识基础 createthreads包 创建线程 1.实现多线程的方法是1种还是2种还是4种? Oracle官方:2种,一种 ...

  2. 偷偷学习Java,然后惊艳所有人 JavaSE总结 - thread多线程

    零基础学Java,肝了bilibili的6百多集JavaSE教程传送门的学习笔记!!! 下面博客分为三部分: ① thread多线程的要点(想快速了解thread多线程的小伙伴选择,内容较多,快也快不 ...

  3. Java多线程学习处理高并发问题

    在程序的应用程序中,用户或请求的数量达到一定数量,并且无法避免并发请求.由于对接口的每次调用都必须在返回时终止,因此,如果接口的业务相对复杂,则可能会有多个用户.调用接口时,该用户将冻结. 以下内容将 ...

  4. C#多线程学习(四) 多线程的自动管理(线程池) (转载系列)——继续搜索引擎研究...

    在多线程的程序中,经常会出现两种情况: 一种情况:   应用程序中,线程把大部分的时间花费在等待状态,等待某个事件发生,然后才能给予响应                   这一般使用ThreadPo ...

  5. 艾伟:C#多线程学习(六) 互斥对象

    本系列文章导航 C#多线程学习(一) 多线程的相关概念 C#多线程学习(二) 如何操纵一个线程 C#多线程学习(三) 生产者和消费者 C#多线程学习(四) 多线程的自动管理(线程池) C#多线程学习( ...

  6. C# 多线程学习总结

    C#多线程学习(一) 多线程的相关概念 什么是进程? 当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源.而一个进程又是由多个线程所组成的. 什么是线程? 线程是 ...

  7. C#多线程学习(二) 如何操纵一个线程

    C#多线程学习(二) 如何操纵一个线程 原文链接:http://kb.cnblogs.com/page/42529/ [1] C#多线程学习(二) 如何操纵一个线程 [2] C#多线程学习(二) 如何 ...

  8. 多线程学习-基础(四)常用函数说明:sleep-join-yield

    一.常用函数的使用 (1)Thread.sleep(long millis):在指定的毫秒内让当前正在执行的线程休眠(暂停执行),休眠时不会释放当前所持有的对象的锁. (2)join():主线程等待子 ...

  9. C#多线程学习之(五)使用定时器进行多线程的自动管理

    本文实例讲述了C#多线程学习之使用定时器进行多线程的自动管理.分享给大家供大家参考.具体分析如下: Timer类:设置一个定时器,定时执行用户指定的函数. 定时器启动后,系统将自动建立一个新的线程,执 ...

  10. java多线程学习-java.util.concurrent详解

    http://janeky.iteye.com/category/124727 java多线程学习-java.util.concurrent详解(一) Latch/Barrier 博客分类: java ...

最新文章

  1. oracle 开链,欧链OracleChain开启Dapps应用新时代
  2. Apache Hadoop 2.4.1 单节点安装
  3. 极简实用的Asp.NetCore模块化框架决定免费开源了
  4. 给孩子一束安全的光 明基WiT MindDuo亲子共读灯首发评测
  5. GFP_KERNEL的作用
  6. python socket编程实例 带图形界面_python的socket编程实例
  7. 百度地图根据位置获取对应的位置中文
  8. java 8 stream入门_跟上 Java 8 : Stream API 快速入门
  9. python的元组是否能重复_python – 在带有元组的列表列表中查找重复项
  10. 复习2个月拿下美团offer,我都做了些啥
  11. python画函数图像-Python 绘制你想要的数学函数图形
  12. 用R来求解一元二次方程
  13. C/C++描述 - 矩阵乘积的计算
  14. zk的session
  15. Allegro通孔焊盘制作
  16. 使用RAK7268网关与RAK3172节点连接至TTN最新的服务器TTS上
  17. 江西省抚州市谷歌高清卫星地图下载
  18. 【Tableau 图表大全1.0】之条形图
  19. python怎样使用各个日期赤纬_Python常用的日期时间处理方法示例
  20. 高端化和智能化是一体两面 腾势D9开启中国MPV新豪华时代

热门文章

  1. 业界总结 | BERT的花式玩法
  2. 面向Transformer模型的高效预训练方法
  3. 【SIGIR2020】信息检索对话中混合主动性和协同性的分析
  4. 【BERT实践】看不懂bert没关系,用起来so easy!
  5. 【每日一读】EMNLP2020:如何提高事件检测(ED)模型的鲁棒性和泛化能力?
  6. 【ACL2020论文尝鲜】何时采用BERT更加有效?
  7. 【论文解读】图文并茂带你细致了解ELMo的各种细节
  8. 【ACL2019】轻松了解张岳实验室的六篇paper
  9. 句法分析(syntactic parsing)在NLP领域的应用是怎样的?
  10. 深度学习TF—5.tf.kears高层API