码迷,mamicode.com
首页 > 编程语言 > 详细

c#之线程入门

时间:2015-05-10 23:40:27      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:

C#支持通过多线程并行地执行代码,一个线程有它独立的执行路径,能够与其它的线程同时地运行。一个C#程序开始于一个单线程,这个单线程是被CLR和操作系统(也称为“主线程”)自动创建的,并具有多线程创建额外的线程。这里的一个简单的例子及其输出:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace 博客
{
    class ThreadTest
    {
        static void Main()
        {
            Thread t = new Thread(WriteY);
            t.Start();                          // Run WriteY on the new thread
            while (true) Console.Write("x");   // Write ‘x‘ forever
        }

        static void WriteY()
        {
            while (true) Console.Write("y");   // Write ‘y‘ forever
        }
    }
}

 主线程创建了一个新线程“t”,它运行了一个重复打印字母"y"的方法,同时主线程重复打印字母“x”。CLR分配每个线程到它自己的内存堆栈上,来保证局部变量的分离运行。在接下来的方法中我们定义了一个局部变量,然后在主线程和新创建的线程上同时地调用这个方法。

using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace 博客
{
    class ThreadTest
    {
        static void Main()
        {
            new Thread(Go).Start();      // Call Go() on a new thread
            Go();                         // Call Go() on the main thread
        }

        static void Go()
        {
            // Declare and use a local variable - ‘cycles‘
            for (int cycles = 0; cycles < 5; cycles++) Console.Write(*);//打印5个“* ”。
        }
    }
}

上述代码中:分别建立了两个线程,运行结果如下,可见副线程与原线程共享数据。技术分享

对于一个线程中的Thread类,有几个至关重要的方法,描述如下:

Start():启动线程;

Sleep(int):静态方法,暂停当前线程指定的毫秒数; 

Abort():通常使用该方法来终止一个线程;

Suspend():该方法并不终止未完成的线程,它仅仅挂起线程,以后还可恢复; 

Resume():恢复被Suspend()方法挂起的线程的执行。

 

Thread.ThreadState 属性:

 

这个属性代表了线程运行时状态,在不同的情况下有不同的值,我们有时候可以通过对该值的判断来设计程序流程。

 

ThreadState 属性的取值如下:

 

Aborted:线程已停止; 

 

AbortRequested:线程的Thread.Abort()方法已被调用,但是线程还未停止; 

 

Background:线程在后台执行,与属性Thread.IsBackground有关; 

 

Running:线程正在正常运行; 

 

Stopped:线程已经被停止; 

 

StopRequested:线程正在被要求停止;

 

Suspended:线程已经被挂起(此状态下,可以通过调用Resume()方法重新运行);

 

SuspendRequested:线程正在要求被挂起,但是未来得及响应; 

 

Unstarted:未调用Thread.Start()开始线程的运行; 

 

WaitSleepJoin:线程因为调用了Wait(),Sleep()Join()等方法处于封锁状态;

 

 

 

多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。

使用多线程可以提高CPU的利用率:在多线程程序中,一个线程必须等待的时候,CPU可以运行其它的线程而不是等待,这样就大大提高了程序的效率。

 

c#之线程入门

标签:

原文地址:http://www.cnblogs.com/weifengxiyu/p/4493267.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!