多线程技术,对于我来说,也正如荷花同样,可远观而不可亵玩焉。为何这么说呢,是由于好久之前就看过相关的博客以及书箱方面的介绍,可是一直在工做当中何尝使用过。固然此次也不是工做须要用到,只是单纯想学学多线程的使用方法,一来是加深对这方面知识的理解,二来是给你们抛砖引玉,三人行,必有我师焉。感受本身一我的学,就像一个苦行僧,须要有很强的毅力才能成功。由于我不够毅力:),因此但愿与你们共同窗习,共同进步,但愿获得你们的指点。html
谈到多线程,有些概念性的东西可能须要再次被搬到纸面上来谈。有程序、进程、线程等吧。多线程
不过说来也好笑,对于概念的东西,确实没什么吸引力,毕竟概念性的东西,读起来老是感受晦涩难懂。没有实例来得简单明了。因此这里面,你们想了解的话,可点击网上详细的介绍(摘自http://blog.chinaunix.net/uid-21843387-id-3029913.html)。函数
好了,其实不看概念也没有关系拉,毕竟咱们用的资源管理器(见下图)来关程序或者是进程还用得少么。毕竟咱们不是创造者,只是使用者。概念的东西是帮助咱们去理解,而不是让咱们受惑。对于我来说,程序是一个电脑的入口。开启了这一个入口以后,就能在电脑里面注册激活它(进程)。它要作事情须要借助电脑的多种资源来完成(线程)。学习
撇开别的不说,多线程为何这么受青睐。这点你们都懂,由于如今的电脑是多核的CPU。对于CPU来说,它的运行速度是很快的,可是其它设备的执行速度就很慢。就像短路运动接力同样,一我的再快,其它几我的不快也是白搭。因此对于单核CPU来说的话,多线程可能还不能彻底发挥功力。可是对于多核CPU来说,那就不一样了。多线程能够更有效地利用CPU资源,从而达到高效的目的。由于使用多线程技术,能够榨取CPU的休息(等待)时间。就像个老板同样,让工人拼命干活,保证多条流水线在同时进行生产。ui
好拉,仁者见仁,智者见智。下面咱们来看看怎么在C#里面使用多线程的实例吧。spa
using System; using System.Threading; using System.Collections.Generic; public class Program { public static void Main(string[] args) { string content = "百川东到海,什么时候复西归?少壮不努力,老大徒伤悲。"; //建立两个线程,分别来显示上面的一首诗 Thread firstThread = new Thread(new ParameterizedThreadStart(Read)); Thread lastThread = new Thread(new ParameterizedThreadStart(Read)); Data firstTwoData = new Data(); firstTwoData.Name = "First Thread"; firstTwoData.Content = content.Substring(0, 12); Data lastTwoData = new Data(); lastTwoData.Name = "Last Thread"; lastTwoData.Content = content.Substring(12, 12); firstThread.Start(firstTwoData); lastThread.Start(lastTwoData); //使用Join方法,则主线程须要等调用Join方法的线程完成后再往下执行 firstThread.Join(); lastThread.Join(); Console.WriteLine("处理完成,收工!"); //调用About方法,则终止线程 firstThread.Abort();
lastThread.Abort(); Console.ReadLine(); } public static void Read(object data) { Data model = data as Data; if (model != null) { //将当前线程阻塞2s Thread.Sleep(2000); Console.WriteLine(string.Format("Thread Name:[{0}], Content:[{1}]", model.Name, model.Content)); } } public class Data { public string Name{get;set;} public string Content{get;set;} } }
关于上面的实例,主要是介绍几个经常使用的多线程方法,方法都是在System.Threading这个命名空间当中。.net
public Thread(ThreadStart start) |
多线程Thread类的构造函数,实例化这个类,便可建立一个多线程的实例。构造函数中的System.Threading.ThreadStart是一个委托,它表示此线程开始执行时要调用的方法。这里要调用的方法不能够有参数。线程
public Thread(ParameterizedThreadStart start) |
多线程Thread类的构造函数,实例化这个类,便可建立一个多线程的实例。构造函数中的System.Threading.ParameterizedThreadStart 是一个委托,它表示此线程开始执行时要调用的方法。这里要调用的方法只能带一个参数。unix
//建立两个线程,分别来显示上面的一首诗 Thread firstThread = new Thread(new ParameterizedThreadStart(Read)); Thread lastThread = new Thread(new ParameterizedThreadStart(Read));
public static void Sleep(int millisecondsTimeout) |
多线程类调用这个方法,能够将当前线程挂起指定的时间。这是Thread类的静态方法,使用比较简单,只须要Thread.Sleep(毫秒时间)。code
public void Start() |
多线程类调用这个方法,即意味着这个多线程正式启动。调用这个方法,则意味着传递到多线程类的构造函数的委托是没有参数,便是使用System.Threading.ThreadStart的委托
public void Start(object parameter) |
多线程类调用这个方法,即意味着这个多线程正式启动。调用这个方法,则意味着传递到多线程类的构造函数的委托是须要参数的,便是使用System.Threading.ParameterizedThreadStart的委托
firstThread.Start(firstTwoData);
lastThread.Start(lastTwoData);
public void Join() |
多线程调用这个方法,即意味着在继续执行标准的 COM 和 SendMessage 消息泵处理期间,阻塞调用线程,直到某个线程终止为止。说白了,就是调用这个方法的多线程以后要执行的指令须要等调用的多线程完成以后才能继续执行。
对于上面的例子来说,因为两个线程firstThread和lastThread都调用了Join()方法。因此Console.WriteLine("处理完成,收工!");须要等两个线程firstThread和lastThread执行完成后,才能继续执行下面的指令。
//使用Join方法,则主线程须要等调用Join方法的线程完成后再往下执行 firstThread.Join(); lastThread.Join(); Console.WriteLine("处理完成,收工!");
public void Abort() |
多线程调用这个方法,便可终止线程。
本文做为入门的学习资料,简单介绍了多线程的经常使用使用方法。但愿与你们一块儿学习。多线程技术是一门高深的技术,要使用得好,仍是须要不断深刻地学习,但愿之后还会继续往这方面添砖加瓦。
至此本文完。