• C#__线程的优先级和状态控制


             线程的优先级:
            一个CPU同一时刻只能做一件事情,哪个线程优先级高哪个先运行,优先级相同看调度算法。
            在Thread类中的Priority属性(Highest,Above,Normal,BelowNormal,Lowest)可以影响线程的优先级

            关于线程的一些状态:
            线程的状态(Runing,Unstarted),线程调用Start方法后,新线程处于Unstarted状态,只有当操作系统调用线程运行时为Runing状态。
            线程休眠 Thread.Sleep()方法,可以让线程进入WaitSleepJoin状态
            终止线程 Thread.Abort()方法,可能会出现ThreadAbortException类型的异常,可以使用try{}catch{}处理这个异常,并在线程结束前做些清理工作。
            需要等待线程结束 Thread.Jion()方法,表示把Thread加入进来,停止当前线程,并把它设置为WaitSleepJion状态,直到加入的线程完成为止。

    1. class Program
    2. {
    3. /*
    4. 线程的优先级:
    5. 一个CPU同一时刻只能做一件事情,哪个线程优先级高哪个先运行,优先级相同看调度算法。
    6. 在Thread类中的Priority属性(Highest,Above,Normal,BelowNormal,Lowest)可以影响线程的优先级
    7. */
    8. /*
    9. 控制线程:
    10. 线程的状态(Runing,Unstarted),线程调用Start方法后,新线程处于Unstarted状态,只有当操作系统调用线程运行时为Runing状态。
    11. 线程休眠 Thread.Sleep()方法,可以让线程进入WaitSleepJoin状态
    12. 终止线程 Thread.Abort()方法,可能会出现ThreadAbortException类型的异常,可以使用try{}catch{}处理这个异常,并在线程结束前做些清理工作。
    13. 需要等待线程结束 Thread.Jion()方法,表示把Thread加入进来,停止当前线程,并把它设置为WaitSleepJion状态,直到加入的线程完成为止。
    14. */
    15. static void test1()
    16. {
    17. int i = 1;
    18. while (i < 100)
    19. {
    20. Console.Write("A");
    21. Thread.Sleep(100);
    22. i++;
    23. }
    24. }
    25. static void test2()
    26. {
    27. while (true)
    28. {
    29. Console.Write("B");
    30. Thread.Sleep(100);
    31. }
    32. }
    33. static void Main(string[] args)
    34. {
    35. Thread a = new Thread(test1);
    36. Thread b = new Thread(test2);
    37. a.Priority = ThreadPriority.Highest;
    38. b.Priority = ThreadPriority.Lowest;
    39. a.Start();
    40. b.Start();
    41. a.Join();
    42. b.Join();
    43. //ABABABABABABABABABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB……
    44. // 不运行完b线程不会往后执行
    45. a.Abort();
    46. b.Abort();
    47. Console.WriteLine("Hello");
    48. }
    49. }

  • 相关阅读:
    矩阵账号搭建流程,3步学会,直接拿去用即可
    力扣(LeetCode)算法_C++——寻找重复的子树
    k8s-部署rancher-页面化管理
    【Java】final关键字&权限修饰符&内部类&引用类型用法
    OpenFeign、RestTemplate支持自定义服务地址列表
    5款经典代码阅读器的使用方案对比
    详解js数组操作——filter()方法
    Vue2 slot插槽学习笔记
    Linux Kernel:调度器scheduler
    如何在RK3568开发板上实现USBNET?——飞凌嵌入式/USB Gadget/USB-NET/网络
  • 原文地址:https://blog.csdn.net/qq_57233919/article/details/132748168