• C# 支持多线程


    C# 支持多线程并行执行程序
    
    1.一个程序由一个单线程开始,该单线程由CLR和操作系统创建而成,并具有多线程创建额外线程的功能.
    2.创建线程的方法
        2.1 通过Thread类来创建线程. ThreadStart委托创建线程
    ThreadStart ts=new ThreadStart(Run);//创建指定线程从哪里(哪个方法)开始的委托
    Thread th=new Thread(ts);//传入指定的委托,创建线程实例
    th.Start();//开始线程
        2.2 通过C#语法糖来创建线程,直接给Thread类传递方法,这个方法只要符合ThreadStart委托所定义的方法格式,这个方法自动被编译器编译成ThreadStart委托.
    Thread th=new Thread(Run);
    th.Start();
        2.3 通过匿名委托的方式创建线程.
    Thread t = new Thread (delegate() { Console.WriteLine ("Hello!"); });
    t.Start();
    
    3.创建线程前需要注意
        3.1 在调用Start()之后,直到线程结束之前,线程的一个IsAlive属性一直未true,
        3.2 一个线程一旦结束,便不能重新开始.
    4.使用排他锁(locker)解决线程安全问题
        在多线程编程中,会有多个线程并发调用同一个代码块A的情况,用来提升代码的执行效率.
    同一时间段,只有一个线程执行代码块B,lock能确保代码块B完成运行的同时,不被其他线程所干扰或中断.lock把一段代码定义为互斥段,互斥段在一个时刻内只允许一个线程进入,其他线程必须等待.
    static void Go()
    {
    lock (locker)
    {
    if (!done) { Console.Write("done"); done = true; }
    }}
        4.1  当lock内语句为值类型而不是引用类型时,则会报编译错误,
        4.2  常用的引用类型有: 类, 接口, 委托, 字符串, object, 数组,使用lock同步时,要保证lock是同一对象,方法是new  一个Object,并且永不修改他。
    static Object locker = new Object();
    static void Write() {
    while (true)
    {
    lock (locker)
    {
    donationNums += 100;
    Console.WriteLine("当前有人正在捐款......请稍等");
    Thread.Sleep(3000);
    Console.WriteLine("到目前为止,共募捐{0}元", donationNums);
    }
    } }
    5.使用Join方法,阻塞调用线程,直到子程序终止或者到一定时间为止,
    主线程执行子线程数组,子线程数组在Join()方法的影响下,子线程数组中的线程不会并发全部执行,而是一个个依次执行,
    6.通过ParameterizedThreadStart委托给线程调用的方法传递参数来区分线程
        6.1 ThreadStart只能接收无参数返回值的方法,
    ParameterizedThreadStart pt = new ParameterizedThreadStart(Run);
    //ParameterizedThreadStart接收一个方法(该方法无返回值,接收一个Object作为参数)
    Thread th = new Thread(pt);
    th.Start(true);
    Run(false); //传递参数
  • 相关阅读:
    重装系统之后应装软件
    中文乱码解决方案
    买电脑需要考虑的电脑配置
    JavaBean个人总结
    Servlet个人总结
    web.xml详解
    默认软件
    Eclipse导入项目
    Eclipse插件安装
    Tomcat详解
  • 原文地址:https://www.cnblogs.com/enych/p/11083958.html
Copyright © 2020-2023  润新知