第一、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, , 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

创建线程(Background Thread)的N种方式的更多相关文章

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

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

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

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

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

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

  4. iOS:创建单例对象的两种方式

    单例模式:创建单例对象的两种方式 方式一:iOS4版本之前      static SingleClassManager *singleManager = nil;      +(SingleClas ...

  5. 你创建线程池最好分为两种线程池,io密集型线程池,或者cpu密集型线程池

    你创建线程池最好分为两种线程池,io密集型线程池,或者cpu密集型线程池. 否则,如果只用一个线程池的话,不管是iO密集的线程,或者cpu消耗大的都放在同一个线程池的话,会发生线程池被撑满的情况

  6. String常用使用方法,1.创建string的常用3+1种方式,2.引用类型使用==比较地址值,3.String当中获取相关的常用方法,4.字符串的截取方法,5.String转换常用方法,6.切割字符串----java

    一个知识点使用一个代码块方便查看 1.创建string的常用3+1种方式 /* 创建string的常用3+1种方式 三种构造方法 public String():创建一个空字符串,不含有任何内容: p ...

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

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

  8. java基础知识回顾之java Thread类--java线程实现常见的两种方式实现Runnable接口(二)

    创建线程的第二中方式: /** *      步骤: 1定义类实现Runnable接口      2.实现Runnable接口中的run方法.      3.通过Thread类建立线程对象,并将Run ...

  9. Android通过子线程更新UI的几种方式

    一般情况下,UI的更新都少不了Handler,首先我们先了解一下Handler机制: Handler消息机制 定义 Message 线程间通信的数据单元,可通过message携带需要的数据创建对象:M ...

随机推荐

  1. JPA简单知识

    ,JPA(Java Persistence API):通过注解或XML描述对象--关系表的映射关系,并将运行期的实体对象持久化到数据库中. JPA是一套规范,不是某个ORM产品,它主要包括以下3方面的 ...

  2. sharepoint 2010 如何给文档库或自定义列表添加评论功能

    转:http://www.cfanz.cn/?c=article&a=read&id=40924 最近公司在知识库中,有一个需求,就是想要给文档添加评论功能,在sharepoint 2 ...

  3. LeetCode题解——Median of Two Sorted Arrays

    题目: 找两个排序数组A[m]和B[n]的中位数,时间复杂度为O(log(m+n)). 解法: 更泛化的,可以找第k个数,然后返回k=(m+n)/2时的值. 代码: class Solution { ...

  4. NOIP2006 作业调度方案

    1.             作业调度方案 (jsp.pas/c/cpp) [问题描述] 我们现在要利用m台机器加工n个工件,每个工件都有m道工序,每道工序都在不同的指定的机器上完成.每个工件的每道工 ...

  5. Hive基础介绍

    HIVE结构 Hive 是建立在 Hadoop 上的数据仓库基础构架.它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储.查询和分析存储在 Hadoop 中的大规模数据的机 ...

  6. HDU-4627 The Unsolvable Problem 简单数学

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4627 对n除个2,然后考虑下奇偶... //STATUS:C++_AC_15MS_228KB #inc ...

  7. how to learn device driver

    making a linux usb driver http://www.kroah.com/linux/ http://matthias.vallentin.net/blog/2007/04/wri ...

  8. INPUT输入框灰体提示

    INPUT输入框灰体提示 <input type="text" value='15 words limit' style="color:#999999" ...

  9. Java之Property-统获取一个应用程序运行的次数

    package FileDemo; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStre ...

  10. hdoj 1874 畅通工程续【dijkstra算法or spfa算法】

    畅通工程续 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...