c#多线程

一个进程可以创建一个或多个线程以执行与该进程关联的部分程序代码。在C#中,线程是使用Thread类处理的,该类在System.Threading命名空间中。使用Thread类创建线程时,只需要提供线程入口,线程入口告诉程序让这个线程做什么。通过实例化一个Thread类的对象就可以创建一个线程。创建新的Thread对象时,将创建新的托管线程。Thread类接收一个ThreadStart委托或ParameterizedThreadStart委托的构造函数,该委托包装了调用Start方法时由新线程调用的方法,示例代码如下:

Thread thread=new Thread(new ThreadStart(method));//创建线程

简写:Thread thread=new Thread(静态方法或动态方法);

thread.Start();                                                           //启动线程

上面代码实例化了一个Thread对象,并指明将要调用的方法method(),然后启动线程。ThreadStart委托中作为参数的方法不需要参数,并且没有返回值。ParameterizedThreadStart委托一个对象作为参数,利用这个参数可以很方便地向线程传递参数,示例代码如下:

Thread thread=new Thread(new ParameterizedThreadStart(method));//创建线程

简写:Thread thread=new Thread(静态方法或动态方法);

thread.Start(参数);                                                                             //启动线程

创建多线程的步骤:
1、编写线程所要执行的方法
2、实例化Thread类,并传入一个指向线程所要执行方法的委托。(这时线程已经产生,但还没有运行)
3、调用Thread实例的Start方法,标记该线程可以被CPU执行了,但具体执行时间由CPU决定

2.1 System.Threading.Thread类

Thread类是是控制线程的基础类,位于System.Threading命名空间下,具有4个重载的构造函数:

名称说明

Thread(ParameterizedThreadStart)

初始化 Thread 类的新实例,指定允许对象在线程启动时传递给线程的委托。要执行的方法是有参的。

Thread(ParameterizedThreadStart, Int32)初始化 Thread 类的新实例,指定允许对象在线程启动时传递给线程的委托,并指定线程的最大堆栈大小

Thread(ThreadStart)

初始化 Thread 类的新实例。要执行的方法是无参的。

Thread(ThreadStart, Int32)

初始化 Thread 类的新实例,指定线程的最大堆栈大小。

如果为了简单,也可以通过匿名委托或Lambda表达式来为Thread的构造方法赋值

运行结果:

ParameterizedThreadStart是一个有参的、返回值为void的委托,定义如下:

public delegate void ParameterizedThreadStart(Object obj)

注意:ParameterizedThreadStart委托的参数类型必须是Object的。如果使用的是不带参数的委托,不能使用带参数的Start方法运行线程,否则系统会抛出异常。但使用带参数的委托,可以使用thread.Start()来运行线程,这时所传递的参数值为null。

2.

(0)

相关推荐

  • 多线程之旅(Thread)

    在上篇文章中我们已经知道了多线程是什么了,那么它到底可以干嘛呢?这里特别声明一个前面的委托没看的同学可以到上上上篇博文查看,因为多线程要经常使用到委托.源码一.异步.同步1.同步(在计算的理解总是要你 ...

  • C# 基础知识系列- 12 任务和多线程

    0. 前言 照例一份前言,在介绍任务和多线程之前,先介绍一下异步和同步的概念.我们之间介绍的知识点都是在同步执行,所谓的同步就是一行代码一行代码的执行,就像是我们日常乘坐地铁通过安检通道一样,想象我们 ...

  • (12条消息) C#中关于线程启动运行带多参数方法的操作

    不带参数的用ThreadStart委托指向要执行的方法,将ThreadStart对象传入Thread的构造函数 public void Test() { Console.WriteLine(" ...

  • JAVA多线程学习笔记整理

    多线程: 三种创建方法 继承Thread类,以线程运行内容重写run方法,创建Thread对象并用start方法启动该线程. (匿名内部类) (Lambda表达式) 实现Runable接口,以线程运行 ...

  • IDM高效率万能多线程下载详细安装教程和使用方法

    使用了IDM插件和脚本之后,真的很香这大大提高了我们电脑的使用效率 但我还没有介绍另一个下载工件.我觉得如果我不写,不知道的人会怀念它.它是著名的互联网下载管理器Internet Download M ...

  • Python爬虫新手入门教学(九):多线程爬虫案例讲解

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. Python爬虫.数据分析.网站开发等案例教程视频免费在线观看 https://space. ...

  • Java学习-多线程

    多线程 任务(Task).进程(Process).线程(Thread) 进程的创建 1.继承Thread类 自定义线程类继承Thread类 重写run()方法,编写线程执行体 创建线程对象,调用sta ...

  • 普通爬虫vs多线程爬虫vs框架爬虫,Python爬对比

    前言 本文的文字及图片过滤网络,可以学习,交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. Python爬虫.数据分析.网站开发等案例教程视频免费在线观看 https://space.b ...

  • 100道Java并发和多线程基础面试题大集合(含解答),这波面试稳了~

    # 前言 这篇文章主要是对多线程的问题进行总结的,因此罗列了100个多线程的问题. 这些多线程的问题来源于各大网站,可能有些问题网上有.可能有些问题对应的答案也有.也可能有些各位网友也都看过,但是本文 ...

  • Java并发多线程编程——Volatile原理与使用

    优质文章,第一时间送达 76套java从入门到精通实战课程分享 一.volitile的理解 Volatile称之为轻量级锁,被volatile修饰的变量,在线程之间是可见的. 可见即一个线程修改了这个 ...

  • 怪才涂:多线程赚钱的核心

    时间是最宝贵的资产,钱没了可以再赚,时间没了也就没了. 越有钱的人,越在乎时间. 越没钱的人,越不在乎时间,反正他们的时间也不值钱. 又一个负循环. 越没钱,越不在乎时间.越不在乎时间,越没钱-- 时 ...

  • ​C#使用线程窗口调试多线程程序

    dotNET跨平台 今天 以下文章来源于dotNET编程大全 ,作者zls365 调试多线程程序一般有以下几种办法 1.在日志的某个地方写日志文件. 优点:不会干扰程序的执行,特别是对网络的多线程通信 ...

  • SpringBoot ThreadPoolTaskScheduler 定时任务 多线程执行 demo

    SpringBoot ThreadPoolTaskScheduler 定时任务 多线程执行 demo