第一、Thread类

  Thread类是实例化线程的主要方法;一个Thread实例管理一个线程,即执行序列。通过简单实例化一个对象,就可以创建一个线程,然后通过Thread对象提供的方法对线程进行管理。

  

Thread thread = new Thread(_ => BackgroundMethod("第一、Thread类创建线程"));thread.Start();thread.Join();

第二、ThreadPool(线程池)类

  提供一个线程池,该线程池可用于执行任务、发送工作项、处理异步 I/O、代表其他线程等待以及处理计时器。

ThreadPool.QueueUserWorkItem(_ => BackgroundMethod("第二、ThreadPool创建线程"));

第三、delegate(委托)

  委托异步回调方法创建线程,只需调用BeginInvoke委托和触发线程。然后,调用EndInvoke将阻塞当前线程。

  

BackgroundMethodDelegate x = new BackgroundMethodDelegate(BackgroundMethod);IAsyncResult a = x.BeginInvoke("第三、delegate委托", null, null);x.EndInvoke(a);

第四、BackgroundWorker类

  在单独线程上执行操作

  

BackgroundWorker worker = new BackgroundWorker();worker.DoWork += delegate { BackgroundMethod("第四、BackGroundWorker创建线程"); };worker.RunWorkerAsync();

第五、System.Threading.Timer

  创建一个计时器,提供以指定时间间隔执行方法机制。

Timer timer = new System.Threading.Timer(_ => BackgroundMethod("第五、Timer计时器"), null, 0, Timeout.Infinite);

第六、Task类

  最简单的任务异步操作

  

using (Task task = new Task(() => BackgroundMethod("第六、Task类创建异步任务"))){task.Start();task.Wait();}

第七、Task.Factory(Task另外一种创建方式)

  创建实例工厂的访问

Task.Factory.StartNew(() => BackgroundMethod("第七、Task第二种创建异步方式"));

第八、Parallel类

  System.Threading.Tasks命名空间下的,提供对并行循环和区域支持

Parallel.Invoke(() => BackgroundMethod("第八、Parallel类"));

第九、System.Reactive.Linq.Observable

  Reactive Extensions 概要

  Reactive Extensions (下面简称 Rx) 是在 Linq 可操作的数据源上针对 "异步"(BeginXXX/EndXXX) 和 "事件"(XXXCompleted) 上的扩展,也可以被称为 "Linq To Asynchronous" 和 " Linq To Events"。相比以前复杂的异步处理或者事件处理,Timer的处理等,结合Linq 形式的Rx编程模型更加简洁。

  关于 Rx 的安装,可以通过 Reactive Extensions (Rx) 的主页 的直接下载安装,当然也可以利用 NuGet 导入 dll (http://nuget.org/packages/Rx-Main) [译注: NuGet 是VS集成的在线 dll部署工具,非常方便]。Rx 不管是 Installer 还是 NuGet 安装的,都有 Stable(稳定版) 和 Experimental(实验版) 两种。

  

Observable.Return("第九、Observable类", Scheduler.Default).Subscribe(BackgroundMethod);

第十、ProcessStartInfo类

  指定启动进程时使用的一组值,严格上应该不处于创建线程这一栏,但已被建议作为一种方式在后台做一些事情,即使它没有资格作为一个后台线程。 (根据定义,一个后台线程是进程中的一个线程不会防止进程终止,而它仍然在运行。 )

ProcessStartInfo startInfo = new ProcessStartInfo("StartThreads.exe", "OutOfProcess");startInfo.CreateNoWindow = false;startInfo.UseShellExecute = false;startInfo.RedirectStandardOutput = true;Process process = Process.Start(startInfo);Console.WriteLine(“第十:ProcessStartInfo”);process.WaitForExit();

测试源码地址:http://files.cnblogs.com/xchit/StartThreads.rar

转载于:https://www.cnblogs.com/xchit/p/3425542.html

创建线程(Background Thread)的N种方式相关推荐

  1. JDK1.8 创建线程池有哪几种方式?

    JDK1.8 创建线程池有哪几种方式? newFixedThreadPool 定长线程池,每当提交一个任务就创建一个线程,直到达到线程池的最大数量,这时线程数量不再变化,当线程发生错误结束时,线程池会 ...

  2. 创建线程池有哪几种方式呢?

    转自: 创建线程池有哪几种方式呢? 下文笔者讲述创建线程池的方法分享,如下所示 java原生提供创建线程池的方式如下 newSingleThreadExecutor():它的特点在于工作线程数目被限制 ...

  3. 创建线程池有哪几种方式?

    线程池创建有七种方式,最核心的是最后一种: newSingleThreadExecutor():它的特点在于工作线程数目被限制为 1,操作一个无界的工作队列,所以它保证了所有任务的都是被顺序执行,最多 ...

  4. 创建线程池有哪几种方式

    一.Executors Executors是一个线程相关的工具类.主要提供了以下几种创建线程池的方法: index method corePoolSize maximumPoolSize keepAl ...

  5. 44.创建线程池有哪几种方式?

    Executors.newFixedThreadPool:创建一个固定大小的线程池,可控制并发的线程数,超出的线程会在队列中等待: Executors.newCachedThreadPool:创建一个 ...

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

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

  7. 19、Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition

    Java并发编程:线程间协作的两种方式:wait.notify.notifyAll和Condition 在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作.比如说最经典的生产者-消费者 ...

  8. 线程间协作的两种方式:wait、notify、notifyAll和Condition

    转载自  线程间协作的两种方式:wait.notify.notifyAll和Condition 在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作.比如说最经典的生产者-消费者模型:当 ...

  9. 【Java8新特性】面试官问我:Java8中创建Stream流有哪几种方式?

    写在前面 先说点题外话:不少读者工作几年后,仍然在使用Java7之前版本的方法,对于Java8版本的新特性,甚至是Java7的新特性几乎没有接触过.真心想对这些读者说:你真的需要了解下Java8甚至以 ...

最新文章

  1. Linux7 CENTOS7修改root密码
  2. xshell 家庭/学校 免费教育版下载
  3. 云栖收官:想跟远道而来的朋友们说
  4. DMG MORI AKTIENGESELLSCHAFT
  5. 华为acl怎么生效_华为ACL配置教程(一)
  6. oracle 布尔转换java布尔_java 布尔值一种赋值方法
  7. 有自定义控件的网站项目发布时,“不允许循环文件引用”的错误”的解决方法
  8. [转]OpenCV学习笔记大集锦
  9. 目标检测——使用OpenCV读取图片要注意进行维度变换
  10. Http client to POST using multipart/form-data
  11. 如果看了此文你还不懂傅里叶变换,那就过来掐死我吧(完整版)
  12. html中怎么加入动态图片,视频加动态水印 怎么在视频画面中添加一个gif动态图片水印...
  13. 2019海康威视内推
  14. 基于微信图书馆教室座位预约小程序系统设计与实现 开题报告
  15. 【译】SafetyNet:Google对Android的篡改检测 (SafetyNet: Google's tamper detection - Part 1 )
  16. css制作导航栏的三角形
  17. 《海边的卡夫卡》读书笔记
  18. 计算机科学概论918
  19. Dagger2基本使用与原理
  20. Javascript是什么?java是什么?JavaScript与Java有什么关系?

热门文章

  1. 如何在7分钟内黑掉40家网站?
  2. 我是一个内向的人,也是一个不善交际的人
  3. iOS 获取appstore 版本号
  4. Android --- RecyclerViwe中使用SnapHelper报错:“An instance of OnFlingListener already set.”
  5. Address already in use: JVM_Bind 端口被占用解决办法
  6. lisp pl线线段数_vlisp每日源码(标注多段线线长)
  7. java选中一格_java-选中排序(新手)
  8. java 静态内部类 线程安全问题_单例模式的七种写法, 面试题:线程安全的单例模式...
  9. 工程打包是什么意思_承包工程是什么意思
  10. 某大型数据中心离心式冷水机组 控制板UPS电源改造项目案例分享