第06部分 多线程
1> 进程
- 进程process是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。即打开一个应用程序就是打开操作系统上的一个进程,进程之间相互独立运行互不干扰,进程之间也可以互相访问,操作。
2> 线程
-
线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中实际运作单位,一条线程指的是进程中一个单一顺序的控制流,一个进程可以并发多个线程,VS程序都在主线程中。(表示为代码从上到下运行的一条管线)
-
多线程:通过代码开启新的线程,同时运行代码的多条管线称之为多线程。
3> 线程语法相关
3.1 线程类Thread
》using System.Threading;
3.2 声明一个新的线程
线程执行的代码,需要封装到一个函数中
Thread t = new Thread(方法名)+4个重载
- 其中()是指有一个委托无参无返回和一个有参无返回,也可以设置分配给新开线程的堆栈大小(int,字节)为0,默认为最大,不可以设置负数,参数过大会被忽略。
- 新线程,将要执行的代码逻辑,被封装到方法中,专用于新开线程声明的参数,配合委托多播,事件订阅等。
3.3 启动线程
t.Start();//t.Start(obj)//带参线程
- 当新线程为死循环时,主线程关闭,新线程也不会停止,互不干扰。
3.4 设置为后台线程
- 当前后台进程结束的时候,整个程序都停止了,即使还有后台线程正在运行,后台线程不会防止应用程序的进程被终止掉,若不设置为后台线程,可能导致进程无法正常关闭。
t.IsBackground = true;//设置为后台线程
3.5 关闭释放一个线程
- 若该线程不是死循环,则是能够结束的逻辑。
- 若为死循环,中止该线程,有两种方式:
- 在循环bool判定的表达式换成bool标识符外部声明:bool isRunning = true;线程不停,将isRunning = false;线程停止
- t = null;表示线程置空,放在开启前会引发异常。可以使用t.Abort()关闭线程,此方法在CoreVS版本不能使用。
3.6 线程休眠
- 休眠方法是Thread中的静态方法,存在于哪个线程,哪个线程执行休眠指令。
Thread.Sleep(10000)//单位毫秒,1s = 1000ms
表示每10s休眠一次线程。
3.7 线程之间的共享数据
-
多个线程使用的内存是共享的,都属于该应用程序进程,当多个线程同时操作同一片内存区域时,可能会成本弧线问题,数据修改异常等。
-
通知Lock的形式避免问题
Lock(引用类型对象)//object obj
{
语句块
}
- 当多个线程当中想要访问同样的数据时,进行逻辑处理时,为了避免不必要的逻辑顺序执行的差错。
lock(obj){ 语句块 }//1
lock(obj){ 语句块 }//2
- 同一引用对象obj,多线程运行的时候会等obj进入第一个线程语句结束后,跳转到下一个线程,上个线程会暂时停止,直到obj重新进入。
3.8 多线程对于我们的意义
- 可以用多线程专门处理一些复杂耗时的处理,比如寻路,网格通信等。
转载:https://blog.csdn.net/weixin_52566131/article/details/116427355
查看评论