1、Thread 多线程
Unity里一般用于Socket连接,开一条线程接消息。
2、Queue 队列
对象的先进先出集合,可以规定特定类型的队列集合,也可以什么类型都存入队列。
Queue aaa = new Queue(); Queue<int> aaa = new Queue<int>(); 都是可以的。
3、lock 关键字
主要用于处理并发问题、锁定独占对象。锁定的必须是引用类型!
先写一个线程类,不用继承MonoBehaviour。
public class XianCheng { public Thread ThreadOne; public Thread ThreadTwo; public Queue<int> queue = new Queue<int>(); //先进先出队列 public void StartXianCheng() { //线程1 ThreadOne = new Thread(Count); //线程开始方法 ThreadOne.IsBackground = true; //后台线程会随着主线程结束退出 //ThreadOne.Name = "Xiancheng1"; //线程名字 ThreadOne.Start(); //开始线程 //线程2 ThreadTwo = new Thread(Count); ThreadTwo.Start(); } public void Count() { //这里可以注释掉lock来测试 lock (queue) //锁定队列,必须等待一条线程访问完成后,别的线程才能使用 { queue.Enqueue(1); //入队 // queue.Dequeue(); //出队,返回队列开始处的对象,并且删除它! Thread.Sleep(1000); //线程休眠毫秒数 // ThreadOne.Suspend(); //暂停线程 // ThreadOne.Resume(); //继续线程 } } }
再写一个类:
public class NewBehaviourScript : MonoBehaviour { XianCheng xiancheng; void Start () { xiancheng = new XianCheng(); xiancheng.StartXianCheng(); } void Update () { Debug.Log(xiancheng.queue.Count); //lock的话,打印先1后2,不lock直接2,因为两个线程同时使用了队列。 } void OnApplicationQuit() { xiancheng.ThreadTwo.Abort(); //终止线程1 xiancheng.ThreadOne.Abort(); //终止线程2 } }
例子很简单,相信只要有些基础的都可以看懂。