using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace 通过Thread发起线程
{
    class Program
    {
        static void Main(string[] args)
        {
            //直接使用Thread类,以及其方法 
            Thread threadA = new Thread(DownLoadFile);
            threadA.Start();
            Console.WriteLine("Main");

//使用Lamdba表达式
            Thread threadB = new Thread(
                () => {
                    Console.WriteLine("使用Lamdba表达式, 开始下载" + Thread.CurrentThread.ManagedThreadId);
                    Thread.Sleep(2000);
                    Console.WriteLine("使用Lamdba表达式,下载完成");
                }               
                );
            threadB.Start();

//传递带参数的方法,,参数是object类型的,,
            Thread threadC = new Thread(UpDataFile);
            threadC.Start("Czhenya.jpeg");

Console.WriteLine("Main");

Console.ReadKey();
        }

static void DownLoadFile()
        {
            Console.WriteLine("开始下载,此协程的Id是"+Thread.CurrentThread.ManagedThreadId);
            Thread.Sleep(2000);
            Console.WriteLine("下载完成");
        }

static void UpDataFile(object filename)
        {
            Console.WriteLine("开始上传" + filename);
            Thread.Sleep(2000);
            Console.WriteLine("上传完成");
        }

}
}

使用线程池创建线程

using System;
using System.Threading;

namespace 线程池创建线程
{
    class Program
    {
        static void Main(string[] args)
        {
            ThreadPool.QueueUserWorkItem(SmallThread);
            ThreadPool.QueueUserWorkItem(SmallThread);
            ThreadPool.QueueUserWorkItem(SmallThread);
            ThreadPool.QueueUserWorkItem(SmallThread);
            ThreadPool.QueueUserWorkItem(SmallThread);
            ThreadPool.QueueUserWorkItem(SmallThread);
            ThreadPool.QueueUserWorkItem(SmallThread);

Console.Read();
        }
        static void SmallThread(object filename)
        {
            Console.WriteLine("线程开始,ID:"+Thread.CurrentThread.ManagedThreadId);
            Thread.Sleep(1000);
            Console.WriteLine("线程结束");
        }
    }
}

使用任务开启线程

using System;
using System.Threading;
using System.Threading.Tasks;

namespace 任务开始线程
{
    class Program
    {
        static void Main(string[] args)
        {
            //第一种  任务开始方式
            Task task = new Task(ThreadDemo);
            task.Start();

//第二种  工厂模式,,
            TaskFactory tf = new TaskFactory();
            Task t = tf.StartNew(ThreadDemo);

Console.ReadKey();
        }
        static void ThreadDemo()
        {
            Console.WriteLine("任务开始,ID:" + Thread.CurrentThread.ManagedThreadId);
            Thread.Sleep(1000);
            Console.WriteLine("任务结束");
        }
    }
}

C# Thread开启线程几种方式相关推荐

  1. java创建线程(Thread)的5种方式

    java创建线程(Thread)的5种方式 方式一:继承于Thread类 方式二:实现Runnable接口 方式三:实现Callable接口 方式四:使用线程池 方式五:使用匿名类 方式一:继承于Th ...

  2. Servlet3.0 开启异步两种方式

    Servlet3.0 开启异步两种方式: 方式一:web.xml形式 <servlet> <servlet-name>async0</servlet-name> & ...

  3. 05用线程类Thread开启线程

    1.,密封类不能被继承 (thread) l类的内部的开启了,没有参数 2.要有参数 一定是object类型,(记住了) 3.自己创造线程 没有参数的时候 4.自己创造线程 有参数 用Thread开启 ...

  4. java开启一个线程_【jdk源码分析】java多线程开启的三种方式

    1.继承Thread类,新建一个当前类对象,并且运行其start()方法 1 packagecom.xiaostudy.thread;2 3 /** 4 * @desc 第一种开启线程的方式5 *@a ...

  5. Qt创建线程两种方式的区别

    使用QT创建线程有两种方式,方式A使用moveToThread,方式B是直接继承QThread.差异主要在于方式A的槽函数将会在新线程中运行,而方式B的槽函数在旧线程中运行. 结论如下: PS:旧线程 ...

  6. java实现线程三种方式_详解三种java实现多线程的方式

    java中实现多线程的方法有两种:继承Thread类和实现runnable接口. 1.继承Thread类,重写父类run()方法 public class thread1 extends Thread ...

  7. Spring Boot开启的2种方式

    Spring Boot依赖 使用Spring Boot很简单,先添加基础依赖包,有以下两种方式 1. 继承spring-boot-starter-parent项目 <parent>< ...

  8. 终止线程 4 种方式

    1.正常运行结束 程序运行结束,线程自动结束. 2.使用退出标志退出线程 一般 run()方法执行完,线程就会正常结束,然而,常常有些线程是伺服线程.它们需要长时间的运行,只有在外部某些条件满足的情况 ...

  9. python启动方法_python进程开启的两种方式

    一.进程 1.1.方式一 from multiprocessing import Process import time #方式一 def task(name): print(f"my na ...

最新文章

  1. ImportError: No module named setuptools
  2. 【已解决】请先调用 init 完成初始化后再调用其他云 API。init 方法可传入一个对象用于设置默认配置,详见文档。; at cloud.callFunction api 解决方案
  3. DI / CDI –基础
  4. linux摄像头内核驱动开发,怎么在Linux下开发摄像头驱动
  5. Rxjava2自我·解惑
  6. 调用gensim库训练word2vec词向量
  7. jquery 中多条件选择器,相对选择器,层次选择器的区别
  8. nvm管理node版本
  9. Xcode 清除最近使用纪录
  10. C#.NET自定义报表数据打印
  11. ezcad旋转轴标刻参数_激光打标机软件ezcad中的曲线圆弧排文本参数说明及设置...
  12. 智能车PCB设计思路
  13. 哔哩哔哩服务器在哪个文件夹,哔哩哔哩在手机哪个文件夹
  14. 产品研发流程的四个里程碑
  15. 最新最全的前端面试题集锦之 微信小程序 篇(从基础到高级)
  16. 2021 个人成长复盘
  17. java的LocalDateTime类来获取当天时间、前一天时间,本周的开始和结束时间、本月的开始和结束时间
  18. Spring AOP源码(1)—<aop:config/>AOP配置标签解析【一万字】
  19. mvdbos php spider,Scrapy-Redis分布式爬取自如网(一)
  20. 22-广搜深搜 Breadth-first Search Depth-first Search

热门文章

  1. js截屏 video_用原生JS和html5进行视频截图并保存到本地
  2. 爬虫python 科研有用吗_为什么说用python写爬虫有优势?
  3. 7-37 组个最小数 (20分)_波音737高度计上蹊跷的“8英尺”,09年土耳其航空1951号航班空难...
  4. c语言logo,真好玩 C语言输出Yahoo动态logo
  5. php aes 128位加密,php实现AES 128位加密的相关操作技巧分享
  6. c语言strchr的用法,C 库函数 - strchr()
  7. php获取文件上传进度,PHP使用APC获取上传文件进度
  8. 游戏引擎架构第二版中文pdf_阿里架构有多牛,一文带你看遍阿里技术架构!
  9. oracle logminer java_Oracle logminer
  10. python调用ping命令_Windows 中通过Python实现ping命令加时间戳