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

优点:提高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();
}

  

  

  

 

最新文章

  1. TID大会学习心得之敏捷软件架构-微服务
  2. [我给Unity官方视频教程做中文字幕]beginner Graphics – Lessons系列之摄像机介绍Cameras
  3. android之Activity回传数据
  4. sublime添加PHP语法检查
  5. struts2的result的type属性
  6. cach
  7. 连接ACCESS 数据库不能使用 '';文件已在使用中。
  8. C# 阳历转农历
  9. 关于File.getPath,File.getAbsolutePath,File.getCanonicalPath的区别
  10. 搭建MHA环境【1】规划+linux相关的设置
  11. 当nginx 500 伪静态错误时,记录解决方法rewrite or internal redirection cycle while processing
  12. 【Netty】UDP广播事件
  13. 【编程技巧】Ext.QuickTips.init();
  14. Unity下一轮最大的变革-Entity Component System &amp; C# Jobs System
  15. js中this是什么?
  16. 如何学习 Webpack
  17. 【python002-设计小游戏】
  18. os &amp; sys
  19. magento中根据用户的id获取用户的所有订单以及每个订单中的物品 以及物品的相关属性
  20. C语言 void 万能类型

热门文章

  1. 前端javascript规范文档 (http://www.xuanfengge.com/category/web)
  2. shell if判断(曾经被一个字符串相等的判断纠结半小时,最后只是if后少了个空格!) 和 awk引用外部变量判断
  3. forEach、map、 for-in 、 for 、some 对比 break
  4. 一种协程的 C/C++ 实现
  5. Base62编码与62进制
  6. Magento网站如何添加一个可配置产品
  7. C# 自定义排序
  8. 学习笔记_过滤器概述(过滤器JavaWeb三大组件之一)
  9. ios 可变参数(va_list,va_start,va_end)
  10. JavaScript高级程序设计(二):在HTML中使用JavaScript