C#从入门到精通之线程的使用

22 篇文章 2 订阅
1.单线程:顾名思义就是只有一个线程。
默认情况下,系统为应用 程序分配一个主线程,该线程执行程序中以Main方法开始和结束的代码。

2.多线程
a.多线程的优点:
1.通过网络与web服务器和数据库进行通信
2.执行占用大量时间的操作
3.区分具有不同优先级的任务
4.使用户界面可以在将时间分配给后台任务时仍能快速做出响应
b.多线程的缺点:
1.系统为进程、AppDomain对象和线程所需的上下文信息使用内存。
  因此,可以创建的进程、AooDomain对象和线程的数目会受到可用内存的限制
2.跟踪大量的线程将占用大量的处理器时间,如果线程过多,则其中大多数线程都不会产生明显的进度。
   如果大多数当前线程处于一个进程中,则其他进程中的调度频率就会很低
3.使用许多线程控制代码执行非常复杂,并可能产生很多bug。
4.销毁线程需要了解可能发生的问题并对那些问题进行处理

3.线程的基本操作
C#中对线程的操作主要用到了Thread类,该类位于System.Threading命名的空间下。
System.Threading命名空间提供了一些可以进行多线程编程的类和接口
3.1创建线程Start()
示例代码:
    static void Main(string[] args)
        {
            Thread myThread;
            myThread = new Thread(new ThreadStart(CreateThread));
            myThread.Start();
            MessageBox.Show(myThread.Name+"线程暂停");
            Thread.Sleep(1000);
            MessageBox.Show("线程创建结束");
        }
        public static void CreateThread()
        {
            MessageBox.Show("开始创建线程");
        }
注意:线程的入口不带任何参数

3.2线程的挂起Suspend()与恢复Resume()
Suspend()用来挂起线程,如果线程已挂起,则不起作用
Resume()用来继续已挂起的线程

3.3 线程休眠Sleep(毫秒数)
Thread.Sleep(1000) //使线程休眠一秒钟

3.4 终止线程
1.Abort()  在调用此方法的线程上引发ThreadAbortException异常
2.Join()  方法用来阻止调用线程,直到某个线程终止时为止
注意:在应用程序中如果使用了多线程,辅助线程还没执行完毕,在关闭窗体时必须关闭辅助线程,否则会引发异常

3.5线程的优先级
可通过访问线程的Priority属性来获取和设置其优先级(Priority属性默认值为ThreadPriority.Normal)
优先级:Highest>AboveNormal>Normal>BelowNormal>Lowest

3.6线程同步
线程同步是指并发线程高效、有序地访问共享资源所采用的技术,
所谓同步 是指某一时刻只有一个线程可以访问资源,只有当资源所有者主动放弃了代码或资源的所有权时,其他线程才可以使用这些资源
线程同步可以分别使用C#中的lock关键字、Monitor类、Interlocked类和Mutex类实现
3.6.1 使用lock关键字实现线程同步
lock关键字可以用来确保代码块完成运行,而不会被其他线程中断,它是通过在代码块运行期间为给定对象获取互斥锁来实现的
lock语法格式
Object obj =new Object();
lock(obj)
{
// 要执行的代码块
}

3.6.2 使用Monitor类实现线程同步(优点:更好的控制力)
Monitor类提供了同步对象的访问机制,
它通过向单个线程授予对象锁来控制对对象的访问,对象锁提供限制访问代码块(临界区)的能力
Monitor类说明:
a.它根据需要与某个对象关联
b.它是未绑定的,也就是说可以直接从任何上下文调用它
c.不能创建Monitor类的实例

Monitor类的常用方法及说明:


语法格式:
Monitor.Enter(this);//锁定当前线程
Monitor.Exit(this); //释放当前线程

3.6.3 使用Mutex类实现线程同步
Mutex类是同步基元,它只向一个线程授予对共享资源的独立访问权。如果一个线程获取了互斥体,
则要获取互斥体的第二个线程将被挂起,指导第一个线程释放该互斥体
Mutex类的常用方法及说明:

语法格式:
Mutex m=new Mutex(false);  //实例化Mutex类对象
m.WaitOne();  //阻止当前线程
m.ReleaseMutex();  //释放Mutex对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tiegenZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值