线程学习2——Thread类

Thread 类   

    使用Thread类可以创建和控制线程,Thread类有如下方法:

    Start():启动线程;

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

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

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

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

    基本用法:

    静态的方法:

using System.Threading;

namespace ConsoleApplication1
{
class Program
{
public static void myStaticThreadMethod()
{
Console.WriteLine(
"myStaticThreadMethod");
Console.ReadLine();
}
static void Main(string[] args)
{
Thread thread1
= new Thread(myStaticThreadMethod);
thread1.Start();
// 只要使用Start方法,线程才会运行
}

}
}

     在线程中运用实例的方法:

using System.Threading;

namespace ConsoleApplication1
{
class Program
{
public void myThreadMethod()
{
Console.WriteLine(
"myThreadMethod");
Console.ReadLine();
}
static void Main(string[] args)
{
Thread thread2
= new Thread(new Program().myThreadMethod);
thread2.Start();
}

}
}

    为了更好地控制线程,可以在线程启动前,设置Name属性,给线程指定名称。

    为了获得当前线程的名称,可以使用静态属性Thread.CurrentThread,获取当前线程的Thread实例,访问Name属性,进行读取访问。

using System.Threading;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Thread.CurrentThread.Name
= "System Thread";//给当前线程起名为"System Thread"
Console.WriteLine(Thread.CurrentThread.Name + " Status:" + Thread.CurrentThread.ThreadState);
Console.ReadLine();
}

}
}

       

     定义一个线程类

      我们可以将Thread类封装在一个MyThread类中,以使任何从MyThread继承的类都具有多线程能力。MyThread类的代码如下:

using System.Threading;

namespace ConsoleApplication1
{
abstract class MyThread
{
Thread thread
= null;
abstract public void run();

public void start()
{
if (thread == null)
thread
= new Thread(run);
thread.Start();
}
}
class Program:MyThread
{
override public void run()
{
Console.WriteLine(
"使用MyThread建立并运行线程");
Console.ReadLine();
}

static void Main(string[] args)
{
Program mPro
= new Program();
mPro.start();
}
}
}

     为线程传递参数

      如果需要给线程传递一些数据,可以采用两种方式。一种方式是使用带ParameterizedThreadStart委托参数的Thread构造函数,另一种是创建一个定制类,把线程的方法定义为实例方法,这样就可以初始化实例的参数,之后启动线程。

       如果使用了ParameterizedThreadStart委托,线程的入口点必须有一个Object类型的参数,返回类型为void。

using System.Threading;

namespace ConsoleApplication1
{
class Program
{
public static void myThreadMethod(object obj)
{
Console.WriteLine(obj);
Console.ReadLine();
}
static void Main(string[] args)
{

Thread thread2 = new Thread(myThreadMethod);
thread2.Start(
"为线程传递参数!");
}
}
}

要注意的是,如果使用的是不带参数的委托,不能使用带参数的Start方法运行线程,否则系统会抛出异常。但使用带参数的委托,可以使用thread.Start()来运行线程,这时所传递的参数值为null。

       给新线程传送数据的另一种方式是定义一个类,将线程的主方法定义为类的一个实例方法:

using System.Threading;

namespace ConsoleApplication1
{
class Program
{
private String mStr;
private int mInt;
public Program(String mStr, int mInt)
{
this.mStr = mStr;
this.mInt = mInt;
}
public void myThreadMethod()
{
Console.WriteLine(mStr);
Console.WriteLine(mInt);
Console.ReadLine();
}
static void Main(string[] args)
{
Program mPro
= new Program("abcd",1234);
Thread thread2
= new Thread(mPro.myThreadMethod);
thread2.Start();
}
}
}
posted @ 2011-05-30 16:03  佳园  阅读(618)  评论(0编辑  收藏  举报