知识大全 实例讲解.NET多线程执行函数

Posted 函数

篇首语:读书和学习是在别人思想和知识的帮助下,建立起自己的思想和知识。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 实例讲解.NET多线程执行函数相关的知识,希望对你有一定的参考价值。

实例讲解.NET多线程执行函数  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  这里为什么会出现多线程?原因是DebugLZQ在写一个LINQ综合Demo的时候遇到了多线程 便停下手来整理一下 关于多线程的文章 园子里很多很多 因此关于多线程理论性的东西 LZ就不去多说了 这篇博文主要是用最简单的例子 总结下多线程调用函数的相关注意点 重点偏向应用和记忆

   多线程调用无参函数

  using System;

  using System Collections Generic;

  using System Linq;

  using System Text;

  using System Threading;

  namespace 多线程

  class Program

  

  static void Main(string[] args)

  

  Console WriteLine( 主线程开始 );

  Thread t = new Thread(new ThreadStart(ShowTime));//注意ThreadStart委托的定义形式

  t Start();//线程开始 控制权返回Main线程

  Console WriteLine( 主线程继续执行 );

  //while (t IsAlive == true) ;

  Thread Sleep( );

  t Abort();

  t Join();//阻塞Main线程 直到t终止

  Console WriteLine( );

  Console ReadKey();

  

  static void ShowTime()

  

  while (true)

  

  Console WriteLine(DateTime Now ToString());

  

  

  

  

  注意ThreadStart委托的定义如下:

  

  可见其对传递进来的函数要求是:返回值void 无参数

   多线程调用带参函数(两种方法)

  using System;

  using System Collections Generic;

  using System Linq;

  using System Text;

  using System Threading;

  namespace 多线程 _带参数

  class Program

  

  static void Main(string[] args)

  

  Console WriteLine( Main线程开始 );

  Thread t = new Thread(new ParameterizedThreadStart(DoSomething));//注意ParameterizedThreadStart委托的定义形式

  t Start(new string[] Hello World );

  Console WriteLine( Main线程继续执行 );

  Thread Sleep( );

  t Abort();

  t Join();//阻塞Main线程 直到t终止

  Console ReadKey();

  

  static void DoSomething(object  s)

  

  string[] strs = s as string[];

  while (true)

  

  Console WriteLine( strs[ ] strs[ ]);

  

  

  

  

  注意ParameterizedThreadStart委托的定义如下:

  

  可见其对传入函数的要求是:返回值void 参数个数 参数类型object

  using System;

  using System Collections Generic; u

  sing System Linq;

  using System Text;

  using System Threading;

  namespace 多线程 _带参数

  class Program

  

  static void Main(string[] args)

  

  Guest guest = new Guest()

  

  Name= Hello Age=

  ;

  Thread t = new Thread(new ThreadStart(guest DoSomething));//注意ThreadStart委托的定义形式

  t Start();

  Thread Sleep( );

  t Abort();

  t Join();//阻塞Main线程 直到t终止

  Console ReadKey();

  

  

  //

  class Guest

  

  public string Name get; set;

  public int Age get; set;

  public void DoSomething()

  

  while (true)

  

  Console WriteLine( Name Age);

  

  

  

  

  这个还是使用ThreadStart委托 对方法进行了一个封装

  两种方法 可随意选择 第一种貌似简洁一点

   线程同步

  线程同步的方法有很多很多种volatile Lock InterLock Monitor Mutex ReadWriteLock

  这里用lock说明问题:在哪里同步 用什么同步 同步谁?

  首先感受下不同步会出现的问题:

  

  代码就是下面的代码去掉lock块

  using System;

  using System Collections Generic;

  using System Linq;

  using System Text;

  using System Threading;

  namespace 多线程 _同步

  class Program

  

  static object obj = new object();//同步用

  static int balance = ;

  static void Main(string[] args)

  

  Thread t = new Thread(new ThreadStart(Credit));

  t Start();

  Thread t = new Thread(new ThreadStart(Debit));

  t Start();

  Console ReadKey();

  

  static void Credit()

  

  for (int i = ; i < ; i++)

  

  lock (obj)

  

  balance += ;

  Console WriteLine( After crediting balance is balance);

  

  

  

  static void Debit()

  

  for (int i = ; i < ; i++)

  

  lock (obj)

  

  balance = ;

  Console WriteLine( After debiting balance is balance);

  

  

  

  

  

cha138/Article/program/net/201311/12352

相关参考