经常看到一些招聘上要求应聘者必须熟练掌握多线程,而对于我这个着实的菜鸟来说多线程这个概念虽然经常听到,但是在实际操作中用的比较少,而且了解的也比较浅显,所以乘着这休息的几天天好好的学习学习,补上这方面的知识。
PS:本文只是多线程这方面学习的记录,并不是对多线程的深入探讨,如果你和我一样对多线程不甚了解,可以和我一起共同学习噢。也欢迎各位大神批评指正,小弟不胜感激!
对于概念这个东东,我历来都不喜欢记,也老是记不住,我更愿意结合概念和实际操作来让它给我留下印象。但是学习前我们还是来看看几个概念,让它首先在我们脑海留下点影子再说。
进程:当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源。而一个进程又是由多个线程所组成的。
线程:线程,有时被称为轻量级进程,是程序执行流的最小单元。
多线程:线程是程序中一个单一的顺序控制流程。在单个程序中同时运行多个线程完成不同的工作,称为多线程。
多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。线程是在同一时间需要完成多项任务的时候实现的。使用线程可以把耗时比较长的任务放到后台单独开一个线程,使程序运行得更快。同时使用多线程可以开发出更人性化的界面,例如当我们提交某项数据的时候通过使用多线程显示处理进度等效果。
最简单的比喻多线程就像一个工厂的工人,而进程则是工厂的某个车间。工人离开车间就无法生产,同理车间也不可能只有一个员工。多线程的出现就是为了提高效率。
更过的线程意味着更多的内存消耗;线程的退出可能会对程序带来麻烦;处理不当造成更多的死锁;过多的线程会影响性能(因为操作系统需要在各个线程间切换)
既然多线程有利又有弊,那么我们就该扬长避短,发挥它的好处,避开它的不利,在以后的学习过程中慢慢总结,定会弄清楚滴!
我们写多线程的代码时一定要引入using System.Threading命名空间哦!
先来看个多线程的简单例子吧,看看是个啥回事儿,具体深入的东东小弟在后面的博客再探讨
1 using System; 2 using System.Threading; 3 4 namespace ConsoleApplication14 5 { 6 class Program 7 { 8 [STAThread] 9 static void Main(string[] args) 10 { 11 Console.WriteLine("测试我的线程开始"); 12 Thread test = new Thread(new ThreadStart(myThread)); 13 test.Start(); 14 Thread.CurrentThread.Name = "断桥残雪"; 15 Console.WriteLine(Thread.CurrentThread.Name + Thread.CurrentThread.ManagedThreadId); 16 Console.WriteLine("测试我的线程结束"); 17 Console.ReadLine(); 18 } 19 20 public static void myThread() 21 { 22 for (int i = 0; i < 100; i++) 23 { 24 Console.WriteLine(i); 25 } 26 } 27 } 28 }
输出如下:
接下来在Console.WriteLine("测试我的线程结束");前加一行代码后:
1 Thread.Sleep(1); 2 Console.WriteLine("测试我的线程结束");
运行截图如下:
看了写的代码和运行结果是不是有点奇怪额,为啥我最后的一行代码Console.WriteLine("测试我的线程结束");提前执行了呢?说句实话哈我现在也不能解释得特别清楚,在后面的学习后我相信我可以回来解释的。<此处留下一个大问号?>还有在代码中使用了一个线程的属性ManagedThreadId,在后面的学习中我会介绍更多这些相关属性和方法,也希望各位大神看到不对的尽管拍砖,奋斗的小菜鸟是打不倒滴、、、
接下来我会写一系列的关于多线程随笔,有兴趣的园友也可以和我一同学习哈,欢迎欢迎!!!
马上就要奔赴上海了,各种的不舍,各种的留恋。武汉别了,祝我爱我的和我爱的人天天开心,永远健康快乐。
------如果你觉得此文对你有所帮助,别忘了点击下右下角的推荐咯,谢谢!------