西西软件园多重安全检测下载网站、值得信赖的软件下载站!
软件
软件
文章
搜索

首页编程开发其它知识 → 简单实例说明多线程是怎么实现的

简单实例说明多线程是怎么实现的

相关软件相关文章发表评论 来源:西西整理时间:2012/5/28 18:56:47字体大小:A-A+

作者:佚名点击:196次评论:0次标签: 多线程

  • 类型:网络共享大小:4.3M语言:中文 评分:.0
  • 标签:
立即下载

由一个简单的例子来分析多线程的执行,先看看简单的例子,代码如下:

class Program
    {
        static int count = 0;

        static void Main(string[] args)
        {
            for (int i = 0; i < 10; i++)
            {
                Thread t = new Thread(Run);
                t.Name = i.ToString();
                t.Start();
            }

            Console.Read();
        }

        static void Run()
        {
            ++count;
            Console.WriteLine("当前线程:{0},Count值为:{1}", Thread.CurrentThread.Name, count);
        }

程序在本机上的执行结果,如上图所示。如果电脑的Cpu比较好的,可能执行的结果跟单线程差不多。

下面来分析下执行结果:

for循环依次开了十个线程,然后调用了线程的Start方法。Start方法在MSDN的摘要为:导致操作系统将当前实例的状态更改为 System.Threading.ThreadState.Running。要注意的是调用线程的Start方法,并不代表线程能马上启动起来(也许CPU正在忙其他的事情)。如何判断线程真的执行起来呢,只需要借助线程的IsAlive属性。
接下来,只根据上面的执行结果,看程序到底是如何跑的。

"线程0",启动,线程立刻进入执行状态,执行Run()方法,静态字段count加1,输出当前线程名称,以及Count值。
"线程1",启动,线程立刻进入执行状态,执行Run()方法,静态字段count加1,执行输出,没有完成输出。
"线程2",启动,线程立刻进入执行状态。执行Run()方法,静态字段count加1,立即输出当前线程名称,以及Count值。
"线程1" 完成输出。
"线程3",启动,线程立刻进入执行状态。执行Run()方法,静态字段count加1,立即输出当前线程名称,以及Count值。
"线程4",启动,线程立刻进入执行状态。执行Run()方法,静态字段count加1,还未执行输出。
"线程5",启动,线程立刻进入执行状态。执行Run()方法,静态字段count加1,还未执行输出。
"线程4",完成执行输出。
"线程5",完成执行输出。
下面的结果就不分析了。

如何保证静态字段Count加一后,完成输出,下一个线程才能调用Run方法,也就是说Run方法,在当前线程执行完后,下一个线程才能执行。在实际编程中,这是经常会遇到的。
我知道的有两个方法(都是对临界资源进行加锁),第一个使用lock,第二个是借助于Monitor的Enter、Exit方法。两个方法都需要一个静态的Object对象,当做临界资源。代码如下:

 static object lockObj = new object();
 
   lock (lockObj)
            {
                ++count;
                Console.WriteLine("当前线程:{0},Count值为:{1}", Thread.CurrentThread.Name, count);
            }

static void Run()
        {
            Monitor.Enter(lockObj);
            ++count;
            Console.WriteLine("当前线程:{0},Count值为:{1}", Thread.CurrentThread.Name, count);
            Monitor.Exit(lockObj);
        }

    网盘
    (268)网盘
    网盘是什么网盘是一个云存储工具,通俗的来说就是你把文件通过网盘储存在网络上。只要你登上网,不论在什么地方都能使用。相当于网络移动盘。用起来挺方便。网盘哪个好其实这个毋庸置疑的百度云网盘是最好的,目前网盘也就那么几家,对用户来说只要免费就行了,其他的对我们的普通用户来说并不是特别重要。网盘下载客户端大全说明西西软件园提供市面上主流网盘的客户端下载,除了网盘客户端的各种版本之外,西西还会提供一些网盘相...更多>>
    360云盘
    (12)360云盘
    云盘继面向所有用户推出永久免费空间后再次发力,免费赠送用户大容量空间寓意六六大顺。这次的活动为的云盘添加了不少新用户。云盘除了提供最基本的文件上传下载服务外,还提供文件实时同步备份功能,只需将文件放到云盘目录,云盘程序将自动上传这些文件至云盘云存储服务中心,同时当在其它电脑登录云盘时自动同步下载到新电脑,实现多台电脑的文件同步。西西为大家提供了云盘官方最新版下载云盘手机版下载。...更多>>

    相关评论

    阅读本文后您有什么感想? 已有人给出评价!

    • 8 喜欢喜欢
    • 3 顶
    • 1 难过难过
    • 5 囧
    • 3 围观围观
    • 2 无聊无聊

    热门评论

    最新评论

    发表评论 查看所有评论(0)

    昵称:
    表情: 高兴 可 汗 我不要 害羞 好 下下下 送花 屎 亲亲
    字数: 0/500 (您的评论需要经过审核才能显示)