关于多线程学习总结(三) 线程简单基本操作

来源:互联网 发布:淘宝首页分类导航 编辑:程序博客网 时间:2024/05/16 00:51
前传

这几天来到上海,身心疲惫,而且烧钱一大把,吃饭、住房、生活用品......,我那个心痛,昨天终于安顿下来,今天是到公司报道的第一天,没做什么,一直在会议室,到了半下午的时候发给我们入职信息表,说合同现在在总部需要寄过来填写等等,然后这一天就这么过去了。还有且说今天来的实习生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,不过建议不要随便设置优先级,不然容易造成死锁哦。

后记

今天学的蛮少滴,这几天身心疲惫,今天终于进入公司,被分到解决方案事业部,接下来还会有一些基础知识方面的培训,得好好努力了,今天就到这里吧,大神见笑了,嘿嘿嘿嘿嘿、、、

------如果你觉得此文对你有所帮助,别忘了点击下右下角的推荐咯,谢谢!------

0 0