线程创建的关键是要给它指定一段线程要执行的代码段,这段代码可以是任意可以访问到的函数,如其它类的静态函数,自己类定义的函数.
1. 先生成一个ThreadStart 类的实例,将要线程执行的代码和这个对象关联,
2. 再在创建线程时的构造函数里,用ThreadStart 类的实例实现关联,
下面的示例说明创建和启动线程。
[Visual Basic, C#, C++] 这段代码产生以下输出:
[C#]
using System;
using System.Threading;
public class ThreadWork
{
public static void DoWork() ()//这里定义了一个函数,后面线程就使用这个函数作为自己的运行代码
{
for(int i = 0; i<3;i++)
{
Console.WriteLine("Working thread...");
Thread.Sleep(100);
}
}
}
class ThreadTest
{
public static void Main()
{
//创建ThreadStart 类的实例,和线程要执行的代码(函数)实现关联,
ThreadStart myThreadDelegate = new ThreadStart(ThreadWork.DoWork);
Thread myThread = new Thread(myThreadDelegate);//用ThreadStart 类的实例和线程实现关联,
myThread.Start();
for(int i = 0; i<3; i++)
{
Console.WriteLine("In main.");
Thread.Sleep(100);
}
}
}
第2个问题是,线程执行的代码里面,如何来共享使用进程里的变量呢?
这个靠线程执行的代码,即和线程关联的函数来决定,
1、当该函数是线程所属的类的成员函数时,就可以共享操作这个对象的所有资源,
2、当该函数是其它类的公共成员函数时,就可以操作其它类的变量
3、整个进程的全局变量,只要在代码中进行了操作,线程就也操作了全局变量.
一切都由和线程关联的函数的内容和性质决定.
因此在编写供线程使用的函数时要千万注意线程间资源的共享和冲突特点,共同操作的变量要给予同步,加锁等,