进程
进程为应用程序的运行实例,是应用程序的一次动态执行。
当一个程序开始运行时,它就是一个进程。
线程
一个进程是由多个线程组成的,线程是程序执行的基本单位。
线程是程序中一个单一的顺序控制流程。
在单个程序中同时运行多个线程完成不同的工作,称为多线程。
Thread类
Thread类,用于对线程进行管理,如创建线程、暂停线程、终止线程、合并线程、设置其优先级并获取其状态。
方法名称 |
|
Thread |
初始化Thread类的新实例 |
Abort |
终止此线程的过程 |
Jion |
阻调塞用线程,直到某个线程终止为止 |
ResetAbort |
取消为当前线程请求的Abort |
Sleep |
将当前线程阻塞指定的毫秒数 |
Start |
使线程执行 |
属性名称 |
说明 |
ISAlive |
返回一个值,该值指示当前线程的执行状态 |
ISBackground |
获取或设置一个值,该值指示某个线程是否为后台线程 |
Name |
获取或设置线程的名称 |
Priority |
数组类型不匹配 |
ThreadState |
获取一个值,该值包含当前线程的状态 |
创建线程
线程生命周期开始于 System.Threading.Thread 类的对象被创建时,结束于线程被终止或完成执行时。
线程生命周期中状态
- 未启动状态:当线程实例被创建但 Start 方法未被调用时的状况。
- 就绪状态:当线程准备好运行并等待 CPU 周期时的状况。
- 不可运行状态:下面的几种情况下线程是不可运行的:
- 已经调用 Sleep 方法
- 已经调用 Wait 方法
- 通过 I/O 操作阻塞
- 死亡状态:当线程已完成执行或已中止时的状况。
线程使用
a、不带参数的 b、带参数的
class Program
{
static void Main(string[] args)
{
//创建线程 参数是委托
Thread thread = new Thread(Method);
//开启线程
thread.Start();
}
static void Method()
{
Console.WriteLine("创建线程啦");
}
}
class Program
{
static void Main(string[] args)
{
Thread thread = new Thread(Method);
thread.Start("传参数啦");
}
//要求参数的类型必须是object
static void Method(object name)
{
Console.WriteLine(name);
}
}
结束线程
a、Abort():调用此方法通常会终止线程。
b、Sleep():将当前线程阻塞指定的毫秒数
c、Suspend():该方法并不是终止未完成的线程,它仅仅挂起线程,以后还可恢复
d、Resume():恢复被Suspend()方法挂起的线程的执行
应用
1、在两个线程调用一个方法
Thread thread = new Thread(print);
thread.Start();
thread.Priority = ThreadPriority.BelowNormal;//优先级
Thread thread1 = new Thread(print);
thread1.Start();
thread1.Priority = ThreadPriority.Highest;//优先级
2、如果是引用同一个对象的话,线程则共享这个数据
Class1 class1 = new Class1();
Thread t = new Thread(class1.TestMethod);
t.Start();
3、static静态共享数据
4、线程安全
5、线程池
线程池:是可以用来在后台执行多个任务的线程集合,这使得主线程可以自由地异步执行其它任务
ThreadPool类提供了一个线程池。
Unity不支持多线程,必须要在主线程中操作它,但Unity可以同时创建很多脚本,并且可以分别绑定在不同的游戏对象身上,他们各自都在执行自己的生命周期,感觉像是多线程并行执行脚本。