zoukankan      html  css  js  c++  java
  • 【C#多线程编程实战笔记】一、 线程基础

    创建线程

    Thread :所执行的方法不能有参数。

    class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("主线程开始....");
                Thread t = new Thread( print_1);
                t.Start();
                
                print_2();
                Console.ReadLine();
    
            }
    
            static void print_1()
            {
                Console.WriteLine("线程开始...");
                string[] a = {"a","b","c","d","e","f","g"};
    
                for (int i = 0; i < 7; i++)
                {
                   
                    Console.WriteLine(a[i]);
                }
            }
    
            static void print_2()
            {
                Console.WriteLine("主线程调用方法...");
                for (int i = 0; i < 50; i++)
                {
                    Console.WriteLine(i);
                }
            }
        }

    ParameterizedThreadStart:可以接受一个输入参数

     static void Main(string[] args)
     {
          Thread ts = new Thread(new ParameterizedThreadStart(print_3));
          ts.Start("123");
          Console.ReadLine();
     }
    
     static void print_3(object a)
    {
          Console.WriteLine($"输出{a}");
    }

     暂停线程

    使线程暂停一段时间而不消耗操作系统资源,程序输出之前,将休眠5秒钟,它会尽可能的少占用CPU时间。

     static void Main(string[] args)
            {
                Console.WriteLine("主线程开始....");
                Thread ts = new Thread(new ParameterizedThreadStart(print_3));
                ts.Start("123");
    
                Console.ReadLine();
            }
    
            static void print_3(object a)
            {
                Thread.Sleep(TimeSpan.FromSeconds(5));
                Console.WriteLine($"输出{a}");
            }

    等待线程

    让程序等待线程中的计算完成,并使用该线程的结果

            static void Main(string[] args)
            {
                Console.WriteLine("主线程开始....");
                Thread ts = new Thread(new ParameterizedThreadStart(print_3));
                ts.Start("123");
                ts.Join();
                Console.WriteLine("主线程继续运行....");
                Console.ReadLine();
            }

    程序运行时,启动了一个耗时的线程。正常情况下,会先打印出  "主线程继续运行....",然后在输出线程中的文字,但我们在程序中调用了ts.Join()方法,该方法允许我们主线程等待线程ts运行完时,主程序再继续运行。借助这个方法可以实现两个线程同步执行步骤,第一个线程会等待另一个线程的结果在继续执行,这时候,第一个线程等待时处于阻塞状态。

    线程状态

    ts.ThreadState.ToString()

    Thread.CurrentThread.ThreadState.ToString()

    ps:始终可以通过Thread.CurrentThread静态属性获得当前Thread对象

    向线程传递参数

    两种:

    var t1 = new Thread(TestCounter),其中TestCounter方法必须是obejct类型的单个参数

    var t2 =new Thread(()=>TestCounter2(12)),使用lambda表达式

  • 相关阅读:
    leetCode 移动零 问题记录
    leetCode 加一 问题记录
    leetCode 两个数组的交集 II 问题记录
    leetCode 只出现一次的数字 问题记录
    leetCode 旋转数组 问题记录
    将本地项目上传到git
    RabbitMQ Linux 安装教程
    springboot RabbitMQ 配置
    linux——mysql5.5 安装遇到问题总结&解决方式
    Js预编译 GO和AO活动对象
  • 原文地址:https://www.cnblogs.com/qiuguochao/p/7342048.html
Copyright © 2011-2022 走看看