创建线程(Background Thread)的N种方式

第一、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 (下面简称 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种方式的更多相关文章
- Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition
Java并发编程:线程间协作的两种方式:wait.notify.notifyAll和Condition 在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作.比如说最经典的生产者-消费者 ...
- 多线程之线程间协作的两种方式:wait、notify、notifyAll和Condition
Java并发编程:线程间协作的两种方式:wait.notify.notifyAll和Condition 在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作.比如说最经典的生产者-消费者 ...
- 19、Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition
Java并发编程:线程间协作的两种方式:wait.notify.notifyAll和Condition 在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作.比如说最经典的生产者-消费者 ...
- iOS:创建单例对象的两种方式
单例模式:创建单例对象的两种方式 方式一:iOS4版本之前 static SingleClassManager *singleManager = nil; +(SingleClas ...
- 你创建线程池最好分为两种线程池,io密集型线程池,或者cpu密集型线程池
你创建线程池最好分为两种线程池,io密集型线程池,或者cpu密集型线程池. 否则,如果只用一个线程池的话,不管是iO密集的线程,或者cpu消耗大的都放在同一个线程池的话,会发生线程池被撑满的情况
- String常用使用方法,1.创建string的常用3+1种方式,2.引用类型使用==比较地址值,3.String当中获取相关的常用方法,4.字符串的截取方法,5.String转换常用方法,6.切割字符串----java
一个知识点使用一个代码块方便查看 1.创建string的常用3+1种方式 /* 创建string的常用3+1种方式 三种构造方法 public String():创建一个空字符串,不含有任何内容: p ...
- 【Java8新特性】面试官问我:Java8中创建Stream流有哪几种方式?
写在前面 先说点题外话:不少读者工作几年后,仍然在使用Java7之前版本的方法,对于Java8版本的新特性,甚至是Java7的新特性几乎没有接触过.真心想对这些读者说:你真的需要了解下Java8甚至以 ...
- java基础知识回顾之java Thread类--java线程实现常见的两种方式实现Runnable接口(二)
创建线程的第二中方式: /** * 步骤: 1定义类实现Runnable接口 2.实现Runnable接口中的run方法. 3.通过Thread类建立线程对象,并将Run ...
- Android通过子线程更新UI的几种方式
一般情况下,UI的更新都少不了Handler,首先我们先了解一下Handler机制: Handler消息机制 定义 Message 线程间通信的数据单元,可通过message携带需要的数据创建对象:M ...
随机推荐
- JPA简单知识
,JPA(Java Persistence API):通过注解或XML描述对象--关系表的映射关系,并将运行期的实体对象持久化到数据库中. JPA是一套规范,不是某个ORM产品,它主要包括以下3方面的 ...
- sharepoint 2010 如何给文档库或自定义列表添加评论功能
转:http://www.cfanz.cn/?c=article&a=read&id=40924 最近公司在知识库中,有一个需求,就是想要给文档添加评论功能,在sharepoint 2 ...
- LeetCode题解——Median of Two Sorted Arrays
题目: 找两个排序数组A[m]和B[n]的中位数,时间复杂度为O(log(m+n)). 解法: 更泛化的,可以找第k个数,然后返回k=(m+n)/2时的值. 代码: class Solution { ...
- NOIP2006 作业调度方案
1. 作业调度方案 (jsp.pas/c/cpp) [问题描述] 我们现在要利用m台机器加工n个工件,每个工件都有m道工序,每道工序都在不同的指定的机器上完成.每个工件的每道工 ...
- Hive基础介绍
HIVE结构 Hive 是建立在 Hadoop 上的数据仓库基础构架.它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储.查询和分析存储在 Hadoop 中的大规模数据的机 ...
- HDU-4627 The Unsolvable Problem 简单数学
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4627 对n除个2,然后考虑下奇偶... //STATUS:C++_AC_15MS_228KB #inc ...
- how to learn device driver
making a linux usb driver http://www.kroah.com/linux/ http://matthias.vallentin.net/blog/2007/04/wri ...
- INPUT输入框灰体提示
INPUT输入框灰体提示 <input type="text" value='15 words limit' style="color:#999999" ...
- Java之Property-统获取一个应用程序运行的次数
package FileDemo; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStre ...
- hdoj 1874 畅通工程续【dijkstra算法or spfa算法】
畅通工程续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...