知识大全 实例讲解.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
相关参考