频道栏目
首页 > 资讯 > 其他综合 > 正文

深入浅出多线程系列之一:简单的Thread

11-05-24        来源:[db:作者]  
收藏   我要投稿

CLR和操作系统会自动的为应用程序创建一个线程,这个线程叫做主线程(main Thread)

如果要创建一个新的线程,可以使用Thread类。下面是一个简单的例子:

class ThreadTest
{
  
static void Main()
  {
    Thread t 
= new Thread (WriteY);          // 创建一个新的线程来执行WriteY方法
    t.Start();                               // 开始运行 WriteY()

    
//在主线程上模拟的做些事情. 
    for (int i = 0; i < 1000; i++) Console.Write ("x");
  }

  
static void WriteY()
  {
    
for (int i = 0; i < 1000; i++) Console.Write ("y");
  }
}

首先创建了一个线程来执行WriteY方法,然后调用Start()来启动创建的线程,接着在主线程中用for循环输出“x”。

很容易就知道答案:例如XXXXYYYYXXXXXYYYYYXXXXYYYYYYYYYYYYYYYYYYYXXXXXXXXXXXXXXX

X和y间隔的出现。

一旦线程启动了,线程的IsAlive属性在线程结束前就会返回True,当传递给线程的构造函数中的委托执行完毕,线程就结束了,一旦线程结束了,线程是不可能再重新启动的。

CLR为每一个线程分配独立的内存栈,这样就可以保证局部变量隔离。下面是使用局部变量的例子。

class ThreadTest
    {
        
bool done;

        
public static void Main()
        {
            ThreadTest tt 
= new ThreadTest();
            
new Thread(tt.Go).Start();
            tt.Go();
        }
        
void Go()
        {
            
if (!done)
            {
                done 
= true;
                Console.WriteLine(
"Done");
            }
        }
    }

因为new Thread(tt.Go) 和tt.Go方法都共享tt的done字段。

所以Console.WriteLine("Done")会且只会被执行一变。

我们修改下上面的代码,修改后如下:

class ThreadTest
    {
        
static bool done; //静态变量被所有的线程共享

        
public static void Main()
        {
            
new Thread(Go).Start();
            Go();
        }
        
static void Go()
        {
            
if (!
相关TAG标签
上一篇:白话算法(7) 生成全排列的几种思路(二) 康托展开
下一篇:深入浅出多线程系列之二:关于Thread的那些事
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站