【C#基础】多线程

一、创建线程

在创建线程之前,需要用到 ThreadStart 委托或者 ParameterizedThreadStart 委托创建 Thread 类的实例。

ThreadStart 委托只能用于无返回值、无参数的方法,ParameterizedThreadStart 委托则可以用于带参数的方法。

1、使用ThreadStart 创建线程

ThreadStart ts = new ThreadStart( 方法名 );

Thread t = new Thread(ts);

ThreadStart这个委托定义为void ThreadStart(),也就是说,所执行的方法不能有参数。

ThreadStart threadStart=new ThreadStart(Calculate);
Thread thread=new Thread(threadStart);
thread.Start();
public void Calculate()
   {
 double Diameter=0.5;
 Console.Write("The Area Of Circle with a Diameter of {0} is {1}"Diameter,Diameter*Math.PI);
   }

2、使用ParameterizedThreadStart创建线程

ParameterizedThreadStart pts=new ParameterizedThreadStart( 方法名 );
Thread t=new Thread(pts);

ParameterThreadStart的定义为void ParameterizedThreadStart(object state),使用这个这个委托定义的线程的启动函数可以接受一个输入参数,具体例子如下 :

ParameterizedThreadStart threadStart=new ParameterizedThreadStart(Calculate);
Thread thread=new Thread(threadStart) ;
thread.Start(0.9);
public void Calculate(object arg)
{
double Diameter=double(arg);
Console.Write("The Area Of Circle with a Diameter of {0} is {1}"Diameter,Diameter*Math.PI);
}
属性或方法说明
Name属性,获取或设置线程的名称
Priority属性,获取或设置线程的优先级
ThreadState属性,获取线程当前的状态
IsAlive 属性,获取当前线程是否处于启动状态
IsBackground属性,获取或设置值,表示该线程是否为后台线程
CurrentThread属性,获取当前正在运行的线程
Start() 方法,启动线程
Sleep(int millisecondsTimout)方法,将当前线程暂停指定的毫秒数
Suspend()方法,挂起当前线程(已经被弃用)
Join()方法,阻塞调用线程,直到某个线程终止为止
Interrupt()方法,中断当前线程
Resume()方法,继续已经挂起的线程(已经被弃用)
Abort()方法,终止线程

二、同步线程

LOCK方法

线程同步的方法是将线程资源共享,允许控制每次执行一个线程,并交替执行每个线程。实现线程同步可以使用 lock 关键字和 Monitor 类、Mutex 类来解决。

对于线程同步操作最简单的一种方式就是使用 lock 关键字,通过 lock 关键字能保证加锁的线程只有在执行完成后才能执行其他线程。

private Object obj = new Object();
lock (obj)
{
    //临界区代码
}

 【实例】创建控制台应用程序,使用 lock 关键字控制打印奇数和偶数的线程,要求先执行奇数线程,再执行偶数线程。

class Program
{
    public void PrintEven()
    {
        lock (this)
        {
            for(int i = 0; i <= 10; i = i + 2)
            {
                Console.WriteLine(Thread.CurrentThread.Name + "--" + i);
            }
        }
    }
    public void PrintOdd()
    {
        lock (this)
        {
            for(int i = 1; i <= 10; i = i + 2)
            {
                Console.WriteLine(Thread.CurrentThread.Name + "--" + i);
            }
        }
    }
    static void Main(string[] args)
    {
        Program program = new Program();
        ThreadStart ts1 = new ThreadStart(program.PrintOdd);
        Thread t1 = new Thread(ts1);
        t1.Name = "打印奇数的线程";
        t1.Start();
        ThreadStart ts2 = new ThreadStart(program.PrintEven);
        Thread t2 = new Thread(ts2);
        t2.Name = "打印偶数的线程";
        t2.Start();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值