关于多线程学习总结(三) 线程简单基本操作
2013-07-16 22:25 昨日书 阅读(1719) 评论(10) 编辑 收藏 举报前传
这几天来到上海,身心疲惫,而且烧钱一大把,吃饭、住房、生活用品......,我那个心痛,昨天终于安顿下来,今天是到公司报道的第一天,没做什么,一直在会议室,到了半下午的时候发给我们入职信息表,说合同现在在总部需要寄过来填写等等,然后这一天就这么过去了。还有且说今天来的实习生10个就有8个本科生,压力山大、、、
好吧,废话少说,听多了影响心情与激情,哈哈哈哈哈
简单的线程
顺便说一句,小弟是学习.net的,所以对C#比较了解些,所以后面的介绍皆以C#来举例
Main函数
我们都知道,在任何一个程序中一般都有一个主函数(在C中是main,在C#中是Main),这就是熟称的程序入口,所有线程都依附于主函数Main(),起始线程也可以称之为主线程。如果所有的前台线程都停止,主线程就可终止,同时后台线程将无条件终止。
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 //Console.WriteLine("测试我的线程开始"); 6 7 Thread test = new Thread(new ThreadStart(myThread)); 8 test.IsBackground = true; 9 test.Start(); 10 11 Console.WriteLine("结束"); 12 Console.ReadKey(); 13 } 14 15 public static void myThread() 16 { 17 Console.WriteLine("我的线程1"); 18 Console.ReadKey(); //加这一句和不加这一句区别 19 Thread.Sleep(5000); //暂停5秒 20 Console.WriteLine("我的线程2"); 21 } 22 }
执行效果(左图加Console.ReadKey(),右图不加):
PS:后台线程必须受制于前台线程,当主线程结束所有后台线程必须结束,例如我们聊天软件,我们关闭聊天软件那么软件就木有检查谁谁上线下线了。通常,后台线程非常适合于完成后台任务,应该将被动侦听活动的线程设置为后台线程,而将负责发送数据的线程设置为前台线程,这样,在所有的数据发送完毕之前该线程不会被终止
关于优先级
是不是听着特别熟悉,对操作系统有了解的园友对这个肯定木有问题,所谓优先级就是在windows上执行的线程在执行了一定时间(一个时间片)后,windows将会进行“调度”,给线程指定优先级,可以影响这个调度。例如现在有一系列的线程,他们的优先级是1,2,4,6,7,那么这个时候操作系统就会优先调用优先级为7的线程,以保证重要的作业可以优先执行(这种调度有时不好,可能导致优先级低的永远都执行不了),看一下C#代码:
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 Console.WriteLine("测试我的线程开始"); 6 7 Thread test1 = new Thread(new ThreadStart(myThread1)); 8 test1.Priority = ThreadPriority.Lowest; 9 test1.Start(); 10 11 Thread test2 = new Thread(new ThreadStart(myThread2)); 12 test1.Priority = ThreadPriority.Highest; 13 test2.Start(); 14 15 Thread test3 = new Thread(new ThreadStart(myThread3)); 16 test1.Priority = ThreadPriority.Normal; 17 test3.Start(); 18 19 Console.WriteLine("结束"); 20 Console.ReadKey(); 21 } 22 23 public static void myThread1() 24 { 25 Console.WriteLine("我的线程1"); 26 } 27 public static void myThread2() 28 { 29 Console.WriteLine("我的线程2"); 30 } 31 public static void myThread3() 32 { 33 Console.WriteLine("我的线程3"); 34 } 35 }
看运行结果后总结:
嘿嘿,看到木有,在我的代码中,1,2,3本来是依次调用,但是执行的时候出现了变化,原因是我设置了线程的优先级
Priority是Thread类的属性,主要是影响线程的优先级,提示一个枚举类型的值,优先级排列如下:Highest > AboveNormal > Normal > BelowNormal > Lowest,不过建议不要随便设置优先级,不然容易造成死锁哦。
后记
今天学的蛮少滴,这几天身心疲惫,今天终于进入公司,被分到解决方案事业部,接下来还会有一些基础知识方面的培训,得好好努力了,今天就到这里吧,大神见笑了,嘿嘿嘿嘿嘿、、、
------如果你觉得此文对你有所帮助,别忘了点击下右下角的推荐咯,谢谢!------