• C# Thread 线程


    Thread  创建和控制线程,设置其优先级并获取其状态

    Thread构造函数接收一个无参数或带一个object类型参数的委托

     1                {
     2                     Console.WriteLine("********ManagedThreadId:{0} {1}********", Thread.CurrentThread.ManagedThreadId.ToString("00"), DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
     3                     ParameterizedThreadStart method = o => NoReturnWithParamater(o);
     4                     Thread thread = new Thread(method);
     5                     thread.Start("123");//开启线程,执行委托的内容
     6                 }
     7                 {
     8                     ThreadStart method = DoSomeThing;
     9                     Thread thread = new Thread(method);
    10                     thread.Start();//开启线程,执行委托的内容
    11                     thread.Suspend();//暂停
    12                     thread.Resume();//恢复    
    13                     //thread.Abort();
    14                     //线程是计算机资源,程序想停下线程,只能向操作系统通知(线程抛异常),
    15                     //会有延时/不一定能真的停下来
    16                     Thread.ResetAbort();
    17                     //1等待
    18                     while (thread.ThreadState != System.Threading.ThreadState.Stopped)
    19                     {
    20                         Thread.Sleep(200);//当前线程休息200ms
    21                     }
    22                     //2 Join等待
    23                     thread.Join();//运行这句代码的线程,等待thread的完成
    24                     thread.Join(1000);//最多等待1000ms
    25                 }
    View Code

    线程操作

    1、Start()           使线程处于Running状态,线程开始执行

    2、Suspend()    挂起线程,或者如果线程已挂起,则不起作用

    3、Resume()     继续执行已挂起的线程

    4、Abort()、Abort(Object)     调用此方法通常会终止线程

    5、ResetAbort()     取消当前线程所请求的 Abort(Object)

    6、Sleep(Int32)、Sleep(TimeSpan)    将当前线程挂起指定的时间

    7、Join()、Join(Int32)、Join(TimeSpan) 在继续执行程序,阻止调用线程,直到由该实例表示的线程终止或经过了指定时间为止

    前后台线程

    区别是:应用程序必须运行完所有的前台线程才可以退出;而对于后台线程,应用程序则可以不考虑其是否已经运行完毕而直接退出,所有的后台线程在应用程序退出时都会自动结束

    可以通过设置 IsBackground 属性来更改

    1 public static void threadMethod()
    2 {
    3     Thread.Sleep(3000);
    4 }
    5 Thread thread = new Thread(threadMethod);
    6 // thread.IsBackground = true;
    7 thread.Start()
    View Code

    如果运行上面的代码,程序会等待3秒后退出,如果将注释去掉,将thread设成后台线程,则程序会立即退出
    要注意的是,必须在调用Start方法之前设置线程的类型,否则一但线程运行,将无法改变其类型

    一般通过Begin...方法运行的线程都是后台线程

    线程优先级

    高优先级,优先执行,但不代表优先完成  甚至说某些情况下,还有意外发生,不能通过这个来控制线程的执行先后顺序,因为操作系统不需要遵循线程的优先级,线程是计算机资源,程序操作线程,只能向操作系统通知,会有延时/不一定能真的执行

    微软文档:

    Thread:https://docs.microsoft.com/zh-cn/dotnet/api/system.threading.thread?view=netframework-4.8

  • 相关阅读:
    详细了解SQLITE 优缺点 性能测试
    特例 FOR 循环
    java获得CPU使用率,系统内存,虚拟…
    中国历史表
    java 内部类
    JAVA 修饰符
    ubuntu android 命令环境下操作sqlite
    ANDROID 绝对布局 相对布局 Linear…
    JAVA 取系统当前日期 少8个小时
    linux 根目录下的子目录的意义
  • 原文地址:https://www.cnblogs.com/Dewumu/p/11812710.html
Copyright © 2020-2023  润新知