1.异步委托开启线程

  1. public static void Main(string[] args)
  2. {
  3.   Action<int,int> a=add;
  4.   a.BeginInvoke(,,null,null);//前两个是add方法的参数,后两个可以为空
  5.   Console.WriteLine("main()");
  6.   Console.ReadKey();
  7. }
  8. static void add(int a,int b)
  9. {
  10.   Console.WriteLine(a+b);
  11. }

2.通过Thread类开启线程

  1. public class Program
  2. {
  3. public static void Main(string[] args)
  4. {
  5. Thread t1;
  6. Thread t2;
  7. t1 = new Thread(SetInfo1);
  8. t2 = new Thread(SetInfo2);
  9. t1.Start();
  10. //线程睡眠
  11. //t1.Join(1000);
  12. //挂起线程
  13. t1.Suspend();
  14. //继续执行线程
  15. t1.Resume();
  16. //结束线程
  17. //t1.Abort();
  18.  
  19. t2.Start();
  20. Console.ReadKey();
  21. }
  22. //奇数线程
  23. public static void SetInfo1()
  24. {
  25. for (int i = ; i < ; i++)
  26. {
  27. if (i % != )
  28. {
  29. Console.WriteLine("奇数为" + i);
  30. }
  31. }
  32. }
  33. //偶数线程
  34. public static void SetInfo2()
  35. {
  36. for (int i = ; i < ; i++)
  37. {
  38. if (i % == )
  39. {
  40. Console.WriteLine("偶数为" + i);
  41. }
  42. }
  43. }
  44. }

3.通过线程池开启线程

  1.    //线程池可以看做容纳线程的容器;一个应用程序最多只能有一个线程池;ThreadPool静态类通过QueueUserWorkItem()方法将工作函数排入线程池; 每排入一个工作函数,就相当于请求创建一个线程;
  2. //线程池的作用:
  3. //1、线程池是为突然大量爆发的线程设计的,通过有限的几个固定线程为大量的操作服务,减少了创建和销毁线程所需的时间,从而提高效率。
  4. //2、如果一个线程的时间非常长,就没必要用线程池了(不是不能作长时间操作,而是不宜。),况且我们还不能控制线程池中线程的开始、挂起、和中止
  5. public class Program
  6. {
  7. public static void Main(string[] args)
  8. {
  9. ThreadPool.QueueUserWorkItem(new WaitCallback(TestThreadPool), new string[] { "hjh" });
  10. Console.ReadKey();
  11. }
  12. public static void TestThreadPool(object state)
  13. {
  14. string[] arry = state as string[];//传过来的参数值
  15. int workerThreads = ;
  16. int CompletionPortThreads = ;
  17. ThreadPool.GetMaxThreads(out workerThreads, out CompletionPortThreads);
  18. Console.WriteLine(DateTime.Now.ToString() + "---" + arry[] + "--workerThreads=" + workerThreads + "--CompletionPortThreads" + CompletionPortThreads);
  19. }
  20. }

4.通过任务Task开启线程

  1. public class Program
  2. {
  3. public static void Main(string[] args)
  4. {
  5. Task task = new Task(DownLoadFile_My);
  6. task.Start();
  7. Console.ReadKey();
  8. }
  9. static void DownLoadFile_My()
  10. {
  11. Console.WriteLine("开始下载...线程ID:"+Thread.CurrentThread.ManagedThreadId);
  12. Thread.Sleep();
  13. Console.WriteLine("下载完成!");
  14. }
  15. }

  1. new Thread(() =>
  2. {
  3. try
  4. {
  5. //运行的代码
  6. }
  7. catch (Exception ex)
  8. {
  9. }
  10. }).Start();

C# 开启线程的几种方式的更多相关文章

  1. 并发编程 - 线程 - 1.开启线程的两种方式/2.进程与线程的区别/3.Thread对象的其他属性或方法/4.守护线程

    1.开启线程的两种方式: 进程,线程: 进程只是用来把资源集中到一起(进程只是一个资源单位,或者说资源集合)而线程才是cpu上的执行单位) 1.同一个进程内的多个线程共享该进程内的地址资源 2.创建线 ...

  2. Python 35 线程(1)线程理论、开启线程的两种方式

    一:线程理论 1 什么是线程 进程其实一个资源单位,而进程内的线程才是cpu上的执行单位 线程其实指的就是代码的执行过程2 为何要用线程   线程vs进程     1. 同一进程下的多个线程共享该进程 ...

  3. python 之 并发编程(线程理论,开启线程的两种方式,进程与线程的区别,线程对象的其他方法)

    9.9 线程理论 1.什么是线程 线程指的是一条流水线的工作过程 进程根本就不是一个执行单位,进程其实是一个资源单位,一个进程内自带一个线程,线程才是执行单位 2.进程VS线程 同一进程内的线程们共享 ...

  4. python 并发编程 多线程 开启线程的两种方式

    一 threading模块介绍 multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性 二 开启线程的两种方式 第一种 每造一个进程,默认有一个线程,就是 ...

  5. C#开启线程的四种方式

    如果需要查看更多文章,请微信搜索公众号 csharp编程大全,需要进C#交流群群请加微信z438679770,备注进群, 我邀请你进群! ! ! 1.异步委托开启线程 public class Pro ...

  6. Python 开启线程的2中方式,线程VS进程(守护线程、互斥锁)

    知识点一: 进程:资源单位 线程:才是CPU的执行单位 进程的运行: 开一个进程就意味着开一个内存空间,存数据用,产生的数据往里面丢 线程的运行: 代码的运行过程就相当于运行了一个线程 辅助理解:一座 ...

  7. 0036 Java学习笔记-多线程-创建线程的三种方式

    创建线程 创建线程的三种方式: 继承java.lang.Thread 实现java.lang.Runnable接口 实现java.util.concurrent.Callable接口 所有的线程对象都 ...

  8. 【java并发】传统线程技术中创建线程的两种方式

    传统的线程技术中有两种创建线程的方式:一是继承Thread类,并重写run()方法:二是实现Runnable接口,覆盖接口中的run()方法,并把Runnable接口的实现扔给Thread.这两种方式 ...

  9. Java创建线程的第二种方式:实现runable接口

    /*需求:简单的卖票程序多个窗口买票 创建线程的第二种方式:实现runable接口 *//*步骤1.定义类实现Runable接口2.覆盖Runable接口中的run方法    将线程要运行的代码存放在 ...

随机推荐

  1. Kali桥接模式下配置动态ip

    以管理员身份运行虚拟机 打开 控制面板-->网络和Internet-->更改适配器 在虚拟机处桥接到这个WLAN2 点击 编辑-->编辑虚拟网卡 没有网卡就点上图的添加网络作为桥接网 ...

  2. Java Keyword Static 学习记录

    Static Java编程思想:一旦将什么东西设为static,数据或方法就不会同那个类的任何对象实例联系到一起. 特点:随着类的加载而加载,随着类的销毁而销毁. 作用:可以修饰成员变量,代码块,方法 ...

  3. 去掉select在苹果手机上的原生样式

    outline: none; -webkit-appearance: none; 该属性会去掉select所有的默认样式,包括下拉箭头,因此需要通过额外的样式控制下拉箭头

  4. 1.pycharm使用

    太白金星的文档: https://www.cnblogs.com/jin-xin/articles/9811379.html 下载专业版,找破解码 一个python文件的开头如果有注视,必须是双引号的 ...

  5. php获取客户IP

    获取客户真实IP,保存到数据库建议转整 function getIp(){ $ip = ''; if(!empty($_SERVER['HTTP_CLIENT_IP'])){ $ip = $_SERV ...

  6. Springboot中RestTemplate -- 用更优雅的方式发HTTP请求

    RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率. 我之前的HTTP开发是用ap ...

  7. centos6.9防火墙设置

    1.输入:cat /etc/issue   查看版本 2. service命令开启以及关闭防火墙为即时生效,下次重启机器的时候会自动复原. 查看防火墙状态:service iptables statu ...

  8. iOS UIWebView 允许所有三方cookie

    前几天项目中用到UIWebView, 而在网页中,用到了多说评论的第三方.但是当我在手机端发表评论的时候,出现禁用第三方cookie,而安卓是没有这种情况的,于是就在找原因.找了很久也没有找到原因.一 ...

  9. [LC] 255. Verify Preorder Sequence in Binary Search Tree

    Given an array of numbers, verify whether it is the correct preorder traversal sequence of a binary ...

  10. linux文件系统与链接

    Linux的文件属性图1 图1   linux的文件属性 ls -lhi -l 长格式 -h 人性化 -i inodo -d 看目录自己的信息 inode 源自于文件系统 分区 平面设计图 格式化 施 ...