您的位置:首页 > 编程语言 > C#

C#多线程小结

2019-07-23 17:45 183 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/qq_37271216/article/details/97014526

声明:参考学习博客https://www.cnblogs.com/jara/p/3427398.html
1、在 C# 中,进程中第一个被执行的线程称为主线程。当 C# 程序开始执行时,主线程自动创建。使用 Thread 类创建的线程被主线程的子线程调用。您可以使用 Thread 类的 CurrentThread 属性访问线程。
2、线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数。
3、Thread类有几个至关重要的方法,描述如下:
Start():启动线程;
Sleep(int):静态方法,暂停当前线程指定的毫秒数;
Abort():通常使用该方法来终止一个线程;
Suspend():该方法并不终止未完成的线程,它仅仅挂起线程,以后还可恢复;
Resume():恢复被Suspend()方法挂起的线程的执行。
4、ThreadPool类用于管理线程池等。
**5、**主线程Main()函数:所有线程都是依附于Main()函数所在的线程的,Main()函数是C#程序的入口,起始线程可以称之为主线程。
**6、**后台进程:线程分为前台线程和后台线程,你说的程序关闭就是前台线程关闭,由于前台线程关闭,那么后台线程会自动进行关闭,如果是多个前台线程,那么只要存才一个前台线程,后台线程就不会关闭。后台进程在操作数据库或通讯时非常实用,因为后台线程在工作时并不影响前台的任何操作。在单一线程中,如不使用后台进程,则通讯时很有可能会造成主窗口假死,直到通讯结束后才会恢复。注意:backgroundworker不能直接操作前台windows窗口中的控件,否则会引起线程的不安全。
7、线程的优先级
由高到低分别是Highest,AboveNormal,Normal,BelowNormal,Lowest。如果创建线程时不指定则默认为Normal优先级。
8,在多线程中,防止几个线程同时执行一个函数,造成混乱问题,可以使用关键字lock来锁定该段代码,只能此线程能执行该段代码,其他线程不能执行。如果想保护一个对象,则使用Monitor 类锁定一个对象,
9、多线程的自动管理:分为两种情况:一种情况: 应用程序中,线程把大部分的时间花费在等待状态,等待某个事件发生,然后才能给予响应,这一般使用ThreadPool(线程池)来解决。 另一种情况:采用定时器去开通和关闭线程,:线程平时都处于休眠状态,只是周期性地被定时器唤醒。(**现目前用第二种定时器控制的线程常用,**第一种线程池以后了解)

小结:主线程是main()所在线程,其余线程为子线程,每个线程工作起来是并行的,分时的运行。配合定时器进行线程的开辟与关断,对于目前的自己很常用。

2019年8月10日添加
在一个线程中的事件同时到来不会产生冲突,但会有一套机制顺序执行。在一个线程中相当于单片机C语言的顺序过程执行,一个线程的一个事件耽误很久,其余事件也不能执行,会造成线程阻塞。
开辟一个线程,未关闭线程之前,线程不会像while(1)以下循环执行线程中的语句,只执行一次,如果在线程里面进行 i++;i只会递增一次,线程开启后会监视事件,在线程中可以调用定时器来保持心跳,循环执行想执行的函数语句。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: