概念

什么是进程?

当一个程序被打开运行时,它就是一个进程。在进程中包括线程,进程可以由一个或多个线程组成。

什么是线程?

线程是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。

什么是多线程?

多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。

个人总结

  在C#中我们开启一个应用程序就是打开了一个进程,这个进程中包括一个主线程。我们可以在此基础上在增加自己写的单个或多个线程,来执行我们想要完成的任务。

  在Thread线程类中我们常用到的一样方法:

    • Start():启动线程;
    • Sleep(int):静态方法,暂停当前线程指定的毫秒数;
    • Abort():通常使用该方法来终止一个线程;
    • Suspend():该方法并不终止未完成的线程,它仅仅挂起线程,以后还可恢复;
    • Resume():恢复被Suspend()方法挂起的线程的执行。

  在C#中开启一个线程,来执行我们所写的方法。主要是通过ThreadStart代理委托来实现。下面写一些简单代码示例。

代码示例

单线程:

using System;
using System.Threading; namespace StudyThread
{
class Program
{
static void Main(string[] args)
{
OneThread();
} static void OneThread()
{
Thread threadA = new Thread(ThreadMethod);
threadA.IsBackground = true; //设置当前子线程为后台线程,为后台线程意味着,主线程关闭后,其他子线程都同时关闭
threadA.Start(); object ThreadParameter = "P";
Thread threadB = new Thread(new ParameterizedThreadStart(ThreadMethodParameter));
threadB.IsBackground = true;
threadB.Start(ThreadParameter); Console.WriteLine("Main Write:M");
Console.ReadLine();
} static void ThreadMethod()
{
for (int i = 0; i < 10; i++)
{
Console.WriteLine("A");
}
} /// <summary>
/// 带参数线程
/// </summary>
/// <param name="Parameter">只能定义一个object参数,因为委托ParameterizedThreadStart为单参数object类型</param>
static void ThreadMethodParameter(object Parameter)
{
for (int j = 0; j < 10; j++)
{
Console.WriteLine("B"+Parameter);
}
} }
}

在代理里分别开启两个线程。

第一个线程ThreadA没带参数,线程运行时去执行ThreadMethod()方法.

第二个线程ThreadB带上一个Object参数,通过ParameterizedThreadStart委托去执行ThreadMethodParameter(object Parameter)方法.此线程在调用Start()时传入所需参数。

(写代码时我在想为什么带参数线程只能传一个object参数?看了代码才知道ParameterizedThreadStart只有一个参数没有重载)。

执行结果:

Main Write:M 为主线程打印。

A:为线程ThreadA打印。

BP:为带参数线程ThreadB打印。

最新文章

  1. fso查找被删除的文件
  2. eclipse 4.5.2 源码修改 格式化Java代码
  3. 微信小程序-登陆、支付、模板消息
  4. 开启flask调试
  5. Objective C类方法load和initialize的区别
  6. Sql Server UniCode编码解码
  7. Codeforces Round #237 (Div. 2) B题模拟题
  8. 批处理:遍历输出指定后缀格式的文件名.bat
  9. 消息中间件MQ基础理论知识
  10. PHP扩展开发(2) - VS2013环境搭建
  11. 网页设计入门&lt;一&gt;
  12. SpringMVC中的文件上传
  13. C#语言介绍
  14. 用servlet校验密码2
  15. 在学习JavaScript中用到的示例
  16. C#-枚举(十三)
  17. 搭建golang学习环境,并用chrome headless获取网页内容
  18. hostapd中扫描的调用过程
  19. 解决Javascript中$(window).resize()多次执行(转)
  20. Luogu3232 HNOI2013 游走 高斯消元、期望、贪心

热门文章

  1. 你应该知道的c# 反射详解
  2. JS同名方法,
  3. 安装linux系统并配置那点事
  4. document.createElement(&quot;A&quot;);
  5. wp上一款应用的出生与死亡
  6. 关于self.用法的一些总结
  7. Golang学习 - sort 包
  8. Android 自定义组合控件
  9. windows10上安装 .NET Framework 3.5
  10. JavaEE&amp;Docker 容器示例