线程学习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();
}
}
}

转载于:https://www.cnblogs.com/jiajiayuan/archive/2011/05/30/2063378.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值