zoukankan      html  css  js  c++  java
  • 线程简单基本操作

    线程简单基本操作

    前传

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

    后记

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

  • 相关阅读:
    《P3953 [NOIP2017 提高组] 逛公园》
    《P4180 [BJWC2010]严格次小生成树》
    《济南icpc补题》
    《levil的因子和》
    《洛谷P2704 [NOI2001]炮兵阵地》
    《Codeforces Round #689 (Div. 2, based on Zed Code Competition)》
    《2174: Leapin' Lizards》
    《3820: Revenge of Fibonacci 》
    马拉车求最长回文子串
    二分训练
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3195483.html
Copyright © 2011-2022 走看看