在项目中经常用到线程Thread,先做个简单记录,后面再完善下,方便以后参考。本人技术有限,如有不同见解之处,欢迎博友批评指正。

执行的线程Thread分无参数的,一个参数,多个参数的。直接看代码吧。

NetFramework4.0后,出现了Task(本质还是Thread),这个效率更高,分配资源更合理。

一、没有参数的

        static void Main(string[] args)
{
Console.WriteLine("主线程开始了...");
Console.WriteLine("主线程Thread:"+Thread.CurrentThread.ManagedThreadId);
Thread thread = new Thread(ThreadTestMthod);
thread.Start();
for (int i = ; i < ; i++)
{
Console.WriteLine("Num:"+i);
} Console.ReadKey();
}
static void ThreadTestMthod()
{
Console.WriteLine("当前线程Thread:"+Thread.CurrentThread.ManagedThreadId);
for (int i = ; i < ; i++)
{
Console.WriteLine("Num:"+i);
}
}

二、一个参数

        static void Main(string[] args)
{
Console.WriteLine("主线程开始了...");
Console.WriteLine("主线程Thread:" + Thread.CurrentThread.ManagedThreadId);
Thread threadParam = new Thread(ThreadTestMthodParam);
//或者Thread threadPapam2 = new Thread(new ThreadStart(() => ThreadTestMthodParam(100)));
//再或者 Thread threadPapam3 = new Thread(() => ThreadTestMthodParam(100));
threadParam.Start(); for (int i = ; i < ; i++)
{
Console.WriteLine("Num:" + i);
} Console.ReadKey();
}
static void ThreadTestMthodParam(object n)
{
int num = Convert.ToInt32(n);
Console.WriteLine("有1个参数Thread:" + Thread.CurrentThread.ManagedThreadId);
for (int i = ; i < num; i++)
{
Console.WriteLine("Num:" + i);
}
}

三、多个参数

其实看到上面你也想到了,可以利用后面的Lambda表达式来表示。

        static void Main(string[] args)
{
Console.WriteLine("主线程开始了...");
Console.WriteLine("主线程Thread:" + Thread.CurrentThread.ManagedThreadId);
Thread threadParams = new Thread(() => ThreadTestMthodParams(, ));
//或者Thread threadParams = new Thread(new ThreadStart(() => ThreadTestMthodParams(100, 200))); threadParams.Start(); for (int i = ; i < ; i++)
{
Console.WriteLine("Num:" + i);
} Console.ReadKey();
}
static void ThreadTestMthodParams(int min, int max)
{
Console.WriteLine("多个参数Thread:" + Thread.CurrentThread.ManagedThreadId);
for (int i = min; i < max; i++)
{
Console.WriteLine("Num:" + i);
}
}

用Task来操作

            Task t1 = new Task(ThreadTestMthod);
t1.Start(); Task t2 = new Task(() => ThreadTestMthodParams(,));
t2.Start();

C#多线程Thread的更多相关文章

  1. c#中@标志的作用 C#通过序列化实现深表复制 细说并发编程-TPL 大数据量下DataTable To List效率对比 【转载】C#工具类:实现文件操作File的工具类 异步多线程 Async .net 多线程 Thread ThreadPool Task .Net 反射学习

    c#中@标志的作用   参考微软官方文档-特殊字符@,地址 https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/toke ...

  2. 2.匿名类,匿名类对象,private/protected/public关键字、abstract抽象类,抽象方法、final关键字的使用,多线程Thread类start方法原理

    package com.bawei.multithread; //注意:模板方法我们通常使用抽象类或者抽象方法!这里我们为了方便在本类中使用就没有使用抽象类/抽象方法 public class Tem ...

  3. 多线程-Thread和ThreadPool

    多线程原理 多线程都是基于委托的. 多线程优缺点 缺点: 1.导致程序复杂,开发调试维护困难,特别是线程交互. 2.线程过多导致服务器卡死,因为占用CPU 内存等资源. 优点: 1.良好的交互,特别对 ...

  4. Java多线程Thread

    转自:http://www.cnblogs.com/lwbqqyumidi/p/3804883.html Java总结篇系列:Java多线程(一)   多线程作为Java中很重要的一个知识点,在此还是 ...

  5. java 多线程--- Thread Runnable Executors

    java 实现多线程的整理: Thread实现多线程的两种方式: (1)继承 Thread类,同时重载 run 方法: class PrimeThread extends Thread { long ...

  6. python进阶学习笔记(四)--多线程thread

    在使用多线程之前,我们首页要理解什么是进程和线程. 什么是进程? 计算机程序只不过是磁盘中可执行的,二进制(或其它类型)的数据.它们只有在被读取到内存中,被操作系统调用的时候才开始它们的生命期.进程( ...

  7. php多线程thread开发与应用的例子

    Php多线程的使用,首先需要PHP5.3以上版本,并安装pthreads PHP扩展,可以使PHP真正的支持多线程,扩展如何安装请自行百度 PHP扩展下载:https://github.com/kra ...

  8. 多线程(Thread),其实很简单!

    目录:  1:线程简介 2:怎么操作线程      3:Thread的常用方法 4:简单的获奖机     5:应用程序域   线程:是Windows任务调度的最小单位.线程是程序中的一个执行流,每个线 ...

  9. 【C#多线程】C#多线程 Thread 开发基础

    引用 using System; using System.Threading; 多线程代码 Thread mainthread = new Thread(ExecuteThread); mainth ...

  10. android 多线程Thread,Runnable,Handler,AsyncTask

    先看两个链接: 1.http://www.2cto.com/kf/201404/290494.html 2. 链接1: android 的多线程实际上就是java的多线程.android的UI线程又称 ...

随机推荐

  1. spring读取配置文件,且获取bean实例

    import org.springframework.beans.factory.BeanFactory;import org.springframework.beans.factory.xml.Xm ...

  2. php 伪造HTTP_REFERER页面URL来源的三种方法

    php获取当前页面的前一个页面URL地址,即当前页面是从哪个页面链接过来的,可以使用$_SERVER['HTTP_REFERER']; 但是$_SERVER['HTTP_REFERER']也是可以被伪 ...

  3. 需要提升权限才能运行dism

    利用系统安装盘来安装.net3.5时,遇到的问题. [命令] dism.exe /online /enable-feature /featurename:NetFX3 /Source:F:\sourc ...

  4. 读经典——《CLR via C#》(Jeffrey Richter著) 笔记_值类型的装箱和拆箱(二)

    [注意]:如果知道自己写的代码会造成编译器反复对一个值类型进行装箱,请改成用手动方式对值类型进行装箱. [好处]:代码会变得更小.更快. [例子]: using System; public seal ...

  5. Flowerpot(又是尺取。。)

    题目:http://172.21.85.56/oj/exercise/problem?problem_id=21568 题目大意:老板需要你帮忙浇花.给出N滴水的坐标,y表示水滴的高度,x表示它下落到 ...

  6. oracle截取字符串,定索引

    转载:https://www.cnblogs.com/qmfsun/p/4493918.html 使用Oracle中Instr()和substr()函数: 1 2 3 4 5 6 7 8 9 10 1 ...

  7. 6 GPath

    1       GPath GPath是Groovy的表达式语言,类似xml的XPath.而二者的不同在于,GPath表达式可以应用于处理POJOs或者处理xml. 例如:a.b.c语句等同于a.ge ...

  8. Python的Profilers性能分析器

    关于Python Profilers性能分析器 关于性能分析,python有专门的文档,可查看:http://docs.python.org/library/profile.html?highligh ...

  9. SQLServer连接查询之Cross Apply和Outer Apply的区别及用法

    https://blog.csdn.net/wikey_zhang/article/details/77480118 先简单了解下cross apply的语法以及会产生什么样的结果集吧! 示例表: S ...

  10. sscanf()分割字符数组

    sscanf与scanf类似,都是用于输入的,只是后者以键盘(stdin)为输入源,前者以固定字符串为输入源. 头文件: #include<stdio.h> 或者 #include < ...